제출 #535434

#제출 시각아이디문제언어결과실행 시간메모리
535434mario05092929Toy Train (IOI17_train)C++14
100 / 100
497 ms1476 KiB
#include "train.h" #include <bits/stdc++.h> #define x first #define y second using namespace std; typedef long long ll; typedef pair <int,int> pi; typedef vector <int> vec; int s[5005],revs[5005],no[5005],n,m,ind[5005],ing[5005]; vec ans,v[5005]; vec who_wins(vec a,vec r,vec u1,vec u2) { n = a.size(); m = u1.size(); for(int i = 0;i < m;i++) { int y = u1[i], x = u2[i]; v[x].push_back(y); ind[y]++; } for(int i = 0;i < n;i++) no[i] = r[i]; queue <int> q; while(1) { memset(ing,0,sizeof(ing)); for(int i = 0;i < n;i++) { if(no[i]) q.push(i); s[i] = no[i]; } while(!q.empty()) { int x = q.front(); q.pop(); for(int i : v[x]) { if(s[i]) continue; ing[i]++; if(!a[i]) { if(ing[i] == ind[i]) { s[i] = 1; q.push(i); } } else { if(ing[i]) { s[i] = 1; q.push(i); } } } } memset(ing,0,sizeof(ing)); for(int i = 0;i < n;i++) { if(s[i]^1) q.push(i); revs[i] = s[i]^1; } while(!q.empty()) { int x = q.front(); q.pop(); for(int i : v[x]) { if(revs[i]) continue; ing[i]++; if(a[i]) { if(ing[i] == ind[i]) { revs[i] = 1; q.push(i); } } else { if(ing[i]) { revs[i] = 1; q.push(i); } } } } int ch = 0; for(int i = 0;i < n;i++) { if(no[i]&&revs[i]) ch = 1, no[i] = 0; } if(!ch) break; } for(int i = 0;i < n;i++) { ans.push_back(revs[i]^1); } 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...