Submission #1360924

#TimeUsernameProblemLanguageResultExecution timeMemory
1360924po_rag526Tour (BOI25_tou)C++20
0 / 100
4 ms344 KiB
#include<bits/stdc++.h>

using namespace std;

#define ll long long
const int maxn=1e6+5;
ll n,m;
vector<array<ll,3>>v[maxn];
vector<pair<ll,ll>>path;
vector<ll>ans;
ll vis[maxn],vis1[maxn],ori;
void dfs(ll x,ll last){
    if(vis[x]==-1||vis[x]==ori||ans.size()) return;
    bool a=(vis[x]>0),b=(ori==-2);
    vis[x]=ori,vis1[x]=1;
    for(auto [to,col,id]:v[x]){
        if(col==last) continue;
        if(b) ori=col;
        path.push_back({x,id});
        if(vis1[to]==1&&col!=ori){
            while(path.back().first!=to){
                ans.push_back(path.back().second);
                path.pop_back();
            }
            ans.push_back(path.back().second);
            return;
        }
        else if(vis1[to]==0) dfs(to,col);
        path.pop_back();
        if(ans.size()) return;
    }
    if(a) vis[x]=-1;
    vis1[x]=0;
}
void solve(){
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        ll a,b,c;
        cin>>a>>b>>c;
        v[a].push_back({b,c,i});
    }
    for(int i=1;i<=n;i++){
        ori=-2;
        dfs(i,0);
    }
    if(ans.size()){
        cout<<"YES\n"<<ans.size()<<' ';
        for(auto i:ans) cout<<i<<' ';
        cout<<'\n';
        ans.clear();
    }
    else cout<<"NO\n";
    for(int i=1;i<=n;i++){
        v[i].clear();
        vis[i]=vis1[i]=0;
    }
    path.clear();
}

int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);
    int _=1;
    cin>>_;
    while(_--) solve();
}
#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...