제출 #1357833

#제출 시각아이디문제언어결과실행 시간메모리
1357833NewtonabcTour (BOI25_tou)C++20
100 / 100
1185 ms544940 KiB
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
vector<tuple<int,int,int>> adj[N];
int ui[N],vi[N],ci[N];
int ti,pi,st,fpi,fst;
bool fd=0;
vector<int> f[N];
map<int,int> vs[N],use[N];
map<int,pair<int,int>> pa[N];
void dfs(int u,int p,int pc,int ei){
    if(fd) return;
    //cout<<"visit" <<u <<"\n";
    vs[u][pc]=1;
    use[u][pc]=ei;
    f[u].push_back(pc);
    for(auto [v,c,id]:adj[u]){
        if(c==pc) continue;
        if(f[v].size()>=3){
            continue;
        }
        if(vs[v][c]){
            if(vs[v][c]==2) continue;
            //cycle founded
            fpi=v,fst=c;
            fd=1,pi=u,st=pc;
            use[v][c]=id;
            return;
        }
        pa[v][c]={u,pc};
        dfs(v,u,c,id);
        if(fd) return;
    }
    vs[u][pc]=2;
}
void solve(){
    fd=0;
    int n,m; cin>>n >>m;
    for(int i=0;i<m;i++){
        cin>>ui[i] >>vi[i] >>ci[i];
        adj[ui[i]].push_back({vi[i],ci[i],i+1});
    }
    for(int i=0;i<m;i++){
        if(vs[vi[i]][ci[i]] || f[vi[i]].size()>=3) continue;
        dfs(vi[i],ui[i],ci[i],i+1);
        if(fd) break;
    }
    if(fd){
        cout<<"YES\n";
        vector<int> ans;
        //cout<<tmp <<" " <<pi <<"\n";
        ans.push_back(use[pi][st]);
        while(pi!=fpi || st!=fst){
            //cout<<pi <<" ";
            auto [npi,nst]=pa[pi][st];
            pi=npi,st=nst;
            ans.push_back(use[pi][st]);
        }
        reverse(ans.begin(),ans.end());
        cout<<ans.size() <<" ";
        for(auto x:ans) cout<<x <<" ";
        cout<<"\n";
    }
    else cout<<"NO\n";
    for(int i=0;i<=n;i++) adj[i].clear(),vs[i].clear(),f[i].clear(),pa[i].clear(),use[i].clear();
}
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int test; cin>>test;
    while(test--){
        solve();
    }
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…