제출 #1366275

#제출 시각아이디문제언어결과실행 시간메모리
1366275SofiatpcTour (BOI25_tou)C++20
100 / 100
487 ms140724 KiB
#include <bits/stdc++.h>

using namespace std;

#define fi first
#define sc second
#define sz(v) (int)v.size()
const int MAXN = 1e6+5;
vector< int > adj[MAXN], ans;
int marc[MAXN], viz[MAXN], cor[MAXN], qtd[MAXN], fim;

bool dfs(int a){
    if(qtd[viz[a]] >= 5)return false;
    qtd[viz[a]]++;

	marc[a] = 1;
	for(int& id : adj[ viz[a] ]){
        if(cor[id] == cor[a])continue;

		if(marc[id] == 1){
			ans.push_back(id);
			fim = id;
			return true;
		}
        if(marc[id] == 2)continue;

		bool b = dfs(id);
		if(b){
            if(fim == id)fim = 0;
			if(fim > 0)ans.push_back(id);
			return true;
		}
	}
	marc[a] = 2;
	return false;
}

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	int t; cin>>t;
	while(t--){
		int n,m; cin>>n>>m;

		for(int i = 1; i <= m; i++){
			int a; cin>>a>>viz[i]>>cor[i];
			adj[a].push_back(i);
		}

		for(int i = 1; i <= m; i++)
            if(!marc[i] && dfs(i))break;

        if(sz(ans) > 0){
    		cout<<"YES\n";
    		cout<<sz(ans)<<" ";
    		for(int i = sz(ans)-1; i >= 0; i--)cout<<ans[i]<<" ";
    		cout<<"\n";
    	}else cout<<"NO\n";

    	ans.clear();
    	for(int i = 1; i <= n; i++){
            adj[i].clear();
            qtd[i] = 0;
        }
        for(int i = 1; i <= m; i++)marc[i] = 0;
	}
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…