제출 #884466

#제출 시각아이디문제언어결과실행 시간메모리
884466abcvuitunggio장난감 기차 (IOI17_train)C++17
100 / 100
728 ms1624 KiB
#include "train.h" #include <bits/stdc++.h> using namespace std; vector <int> ke[5001],res,A,R; int n,m,deg[5001],d[5001]; queue <int> q; void bfs(vector <int> ve, int w){ memset(d,0,sizeof(d)); for (int i:ve){ d[i]=1; q.push(i); } while (!q.empty()){ int u=q.front(); q.pop(); for (int v:ke[u]) if (!d[v]){ if (A[v]==w||!--deg[v]){ d[v]=1; q.push(v); } } } } vector <int> who_wins(vector <int> a, vector <int> r, vector <int> u, vector <int> v){ A=a,n=a.size(),m=u.size(); res.assign(n,-1); while (true){ R.clear(); for (int i=0;i<n;i++){ ke[i].clear(); deg[i]=0; if (r[i]&&res[i]==-1) R.push_back(i); } for (int i=0;i<m;i++) if (res[u[i]]==-1&&res[v[i]]==-1){ ke[v[i]].push_back(u[i]); deg[u[i]]++; } bfs(R,1); R.clear(); for (int i=0;i<n;i++) if (res[i]==-1&&!d[i]) R.push_back(i); if (R.empty()){ for (int i=0;i<n;i++) if (d[i]) res[i]=1; break; } memset(deg,0,sizeof(deg)); for (int i=0;i<m;i++) if (res[u[i]]==-1&&res[v[i]]==-1) deg[u[i]]++; bfs(R,0); for (int i=0;i<n;i++) if (d[i]) res[i]=0; } return res; }
#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...