Submission #1360969

#TimeUsernameProblemLanguageResultExecution timeMemory
1360969m5588ohammedTour (BOI25_tou)C++20
0 / 100
5 ms500 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define mod 99999937
#define endl '\n'
int color[1000001],ot[1000001],fre[1000001],vis[1000001];
vector <array <int,3>> v[1000001];
vector <int> nxt,ans;
vector <array<int,2>> edge;
int u=0;
int n,m;
void find(int i){
    int j=i;
    fre[j]--;
    while(fre[i]>0){
        j=edge[nxt.back()][0];
        ans.push_back(nxt.back());
        nxt.pop_back();
        fre[j]--;
    }
    u=1;
    return;
}
void dfs(int i,int last){
    if(fre[i]>4) return;
    fre[i]++;
    if(color[i]!=0){
        find(i);
    }
    if(ot[i]!=last&&ot[i]!=0){
        find(i);
    }
    if(ot[i]==last) color[i]=last;

    for(auto [j,c,idx]:v[i]){
        if(last==c||u==1||vis[i]==1) continue;
        ot[i]=c;
        nxt.push_back(idx);
        dfs(j,c);
        nxt.pop_back();
    }
    return;
}
void mark(int i){
    vis[i]=1;
    for(auto [j,c,idx]:v[i]){
        if(vis[j]==1) continue;
        mark(j);
    }
    return;
}
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int t;
    cin>>t;
    while(t--){
        cin>>n>>m;
        edge.clear();nxt.clear();ans.clear();
        u=0;
        for(int i=1;i<=n;i++){
            v[i].clear();
            fre[i]=ot[i]=color[i]=vis[i]=0;
        }

        for(int i=0;i<m;i++){
            int a,b,c;
            cin>>a>>b>>c;
            v[a].push_back({b,c,i});
            edge.push_back({a,b});
        }

        for(int i=1;i<=n;i++){
            if(vis[i]==0){
                dfs(i,-1);
                if(u==1) break;
                mark(i);
            }
        }
        if(u==0) cout<<"NO"<<endl;
        else{
            cout<<"YES"<<endl;
            cout<<ans.size()<<" ";
            reverse(ans.begin(),ans.end());
            for(int i:ans) cout<<i+1<<" ";
            cout<<endl;
        }

    }
    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...