제출 #1365868

#제출 시각아이디문제언어결과실행 시간메모리
1365868julia_08Tour (BOI25_tou)C++20
32 / 100
627 ms1114112 KiB
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 2e6 + 10;

int color[MAXN], vis[MAXN], out[MAXN];

int pai[MAXN];

vector<pair<int, int>> adj[MAXN];

vector<int> nadj[MAXN];

bool cycle = false;

vector<int> ans;

void get_cycle(int u, int v){

  while(v != u){
    ans.push_back(v);
    v = pai[v];
  }

  ans.push_back(u);
  reverse(ans.begin(), ans.end());

}

void dfs(int v){

  vis[v] = 1;

  for(auto u : nadj[v]){
    if(!vis[u]){

      pai[u] = v;
      dfs(u);

    } else if(!out[u]){

      if(!cycle) get_cycle(u, v);
      cycle = true;

    }
  }

  out[v] = 1;

}

void solve(){

  int n, m; cin >> n >> m;

  cycle = false;
  ans.clear();

  for(int i=1; i<=n; i++) adj[i].clear();

  for(int i=0; i<m; i++){
    nadj[i].clear();
    vis[i] = out[i] = 0;
  }

  for(int i=0; i<m; i++){

    int a, b; cin >> a >> b >> color[i];
    adj[a].push_back({b, i});

  }

  for(int i=1; i<=n; i++){

    for(auto [j, c] : adj[i]){
      for(auto [k, d] : adj[j]){

        if(color[c] == color[d]) continue;
        nadj[c].push_back(d);

      }
    }

  }

  for(int i=0; i<m; i++) if(!vis[i]) dfs(i);

  if(!cycle){
    cout << "NO\n";
    return;
  }

  cout << "YES\n";

  cout << (int) ans.size() << " ";

  for(auto i : ans) cout << i + 1 << " ";
  cout << "\n";

}

int main(){
  cin.tie(0)->sync_with_stdio(0);

  int t; cin >> t;

  while(t--){
    solve();
  }

  return 0;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…