제출 #1208471

#제출 시각아이디문제언어결과실행 시간메모리
1208471Hanksburger장난감 기차 (IOI17_train)C++17
0 / 100
166 ms1380 KiB
#include "train.h" #include <bits/stdc++.h> using namespace std; vector<int> adj[5005], rev[5005]; vector<int> who_wins(vector<int> a, vector<int> r, vector<int> U, vector<int> V) { int n=a.size(); vector<int> cnt(n, 0), ok(n, 0), ans(n, 0); for (int i=0; i<U.size(); i++) { adj[U[i]].push_back(V[i]); rev[V[i]].push_back(U[i]); } queue<int> q; for (int i=0; i<n; i++) { if (r[i]) { ok[i]=1; q.push(i); } } while (!q.empty()) { int u=q.front(); q.pop(); for (int v:rev[u]) { if (ok[v]) continue; if (a[v] || ++cnt[v]==adj[v].size()) { ok[v]=1; q.push(v); } } } for (int j=0; j<n; j++) { for (int i=0; i<n; i++) { cnt[i]=0; if (!r[i]) continue; ans[i]=1-a[i]; for (int v:adj[i]) if (a[i]^ok[v]^1) ans[i]=a[i]; if (j==n-1 && ans[i]) q.push(i); } for (int i=0; i<n; i++) ok[i]=ans[i]; } while (!q.empty()) { int u=q.front(); q.pop(); for (int v:rev[u]) { if (ans[v]) continue; if (a[v] || ++cnt[v]==adj[v].size()) { ans[v]=1; q.push(v); } } } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...