제출 #1365878

#제출 시각아이디문제언어결과실행 시간메모리
1365878talyTour (BOI25_tou)C++20
51 / 100
2094 ms36248 KiB
#include <bits/stdc++.h>
#define pii pair<int, int>
#define ff first
#define ss second
#define int long long
#define pb push_back
#define endl '\n'
using namespace std;
int n, m;
vector<vector<tuple<int, int, int>>> viz;
vector<int> marc;
vector<int> ordem;
vector<int> resp;
vector<int> bef;

bool dfs(int v, int ant, int i){
    if(marc[i]==2)return 0;
    if(marc[i]==1){
        // cout << i << endl;
        int at=bef[i];
        while(at!=i){
            // cout << at << endl;
            resp.pb(at);
            at=bef[at];
        }
        resp.pb(i);
                marc[i]=2;
                return 1;
    }
    marc[i]=1;
    for(auto [u, w, id]:viz[v]){
        if(marc[id]!=2&&w!=ant){
            bef[id]=i;
            if(dfs(u, w, id)){
                marc[i]=2;
                return 1;
            }
            bef[id]=-1;
        }
    }
    marc[i]=2;
    return 0;
}

void solve(){
    cin >> n >> m;
    viz.assign(n, {});
    bef.assign(m, -1);
    resp={};
    ordem={};
    vector<int> arestas(m);
    marc.assign(m, 0);
    vector<int> pesos(m);
    for(int i=0; i<m; i++){ 
        int a, b, c; 
        cin>> a >> b >> c;
        a--; b--;
        viz[a].pb({b, c, i});
        pesos[i]=c;
        arestas[i]=b;
    }
    for(int i=0; i<m; i++){
        if(marc[i]>=1)continue;
        if(dfs(arestas[i], pesos[i], i)){
            cout << "YES"<<endl;
            cout << resp.size()<<" ";
            for(int j=resp.size()-1; j>=0; j--){
                cout << resp[j]+1<<" ";
            }
            cout << endl;
            return;
        }
    }
    cout << "NO"<<endl;
}

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    int t; cin >> t;
    while(t--){
        solve();
    }
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…