제출 #1338410

#제출 시각아이디문제언어결과실행 시간메모리
1338410PieArmyTour (BOI25_tou)C++20
100 / 100
886 ms273512 KiB
#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define fr first
#define sc second
#define endl '\n'
using namespace std;
#define mid ((left+right)>>1)

int n,m;
vector<pair<int,pair<int,int>>>komsu[1000023];
map<int,int>mp[1000023];
vector<int>ans;

pair<int,int> dfs(int pos,int las){
	if(mp[pos][las]==1){
		cout<<"YES"<<endl;
		return {pos,las};
	}
	if(mp[pos].size()>3){
		mp[pos].erase(las);
		return {-1,-1};
	}
	if(mp[pos][las]==2){
		return {-1,-1};
	}
	mp[pos][las]=1;
	for(auto x:komsu[pos]){
		if(x.sc.fr==las)continue;
		pair<int,int>p=dfs(x.fr,x.sc.fr);
		if(p.fr==-2)return p;
		if(p.fr!=-1){
			ans.pb(x.sc.sc);
			if(p.fr==pos&&p.sc==las)return {-2,-2};
			return p;
		}
	}
	mp[pos][las]=2;
	return {-1,-1};
}

void code(){
	cin>>n>>m;
	ans.clear();
	for(int i=1;i<=n;i++){
		mp[i].clear();
		komsu[i].clear();
	}
	for(int i=1;i<=m;i++){
		int x,y,z;cin>>x>>y>>z;
		komsu[x].pb({y,{z,i}});
	}
	for(int i=1;i<=n;i++){
		for(auto x:komsu[i]){
			pair<int,int>p=dfs(x.fr,x.sc.fr);
			if(p.fr!=-1){
				reverse(ans.begin(),ans.end());
				cout<<ans.size()<<" ";
				for(int y:ans){
					cout<<y<<" ";
				}
				return;
			}
		}
	}
	cout<<"NO";
}

signed main(){
	ios_base::sync_with_stdio(23^23);cin.tie(0);
	int t;cin>>t;
	while(t--){
		code();
		cout<<endl;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...