Submission #704023

#TimeUsernameProblemLanguageResultExecution timeMemory
704023Abrar_Al_SamitToy Train (IOI17_train)C++17
38 / 100
2075 ms1876 KiB
#include<bits/stdc++.h> #include "train.h" using namespace std; const int nax = 5000; int n, m; vector<int>g[nax], gt[nax]; vector<int>A, R; vector<int> who_wins(vector<int> a, vector<int> r, vector<int> u, vector<int> v) { n = a.size(), m = u.size(); for(int i=0; i<m; ++i) { g[u[i]].push_back(v[i]); gt[v[i]].push_back(u[i]); } A = a, R = r; vector<int>res(n); while(1) { set<int>nontrap, trap; queue<int>q; for(int i=0; i<n; ++i) { if(R[i]) nontrap.insert(i), q.push(i); else trap.insert(i); } int need[n] = {0}; for(int i=0; i<n; ++i) { if(nontrap.count(i)) continue; if(A[i]) need[i] = 1; else need[i] = g[i].size(); } while(!q.empty()) { int v = q.front(); q.pop(); trap.erase(v); nontrap.insert(v); for(int to : gt[v]) { if(--need[to]==0) { q.push(to); } } } vector<int>trans; for(int x : nontrap) { bool all = true, one = false; for(int to : g[x]) { all &= trap.count(to); one |= trap.count(to); } if(A[x] && all) { trans.push_back(x); } else if(!A[x] && one) { trans.push_back(x); } } if(trans.empty()) { for(int x : nontrap) res[x] = 1; break; } for(int x : trans) { trap.insert(x); nontrap.erase(x); R[x] = 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...