Submission #704026

#TimeUsernameProblemLanguageResultExecution timeMemory
704026Abrar_Al_SamitToy Train (IOI17_train)C++17
100 / 100
389 ms1672 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); int need[n]; bool trap[n], nontrap[n]; while(1) { queue<int>q; for(int i=0; i<n; ++i) { need[i] = trap[i] = nontrap[i] = 0; } for(int i=0; i<n; ++i) { if(R[i]) nontrap[i] = 1, q.push(i); else trap[i] = 1; } for(int i=0; i<n; ++i) { if(nontrap[i]) continue; if(A[i]) need[i] = 1; else need[i] = g[i].size(); } while(!q.empty()) { int v = q.front(); q.pop(); trap[v] = 0, nontrap[v] = 1; for(int to : gt[v]) { if(--need[to]==0) { q.push(to); } } } vector<int>trans; bool did = false; for(int x=0; x<n; ++x) if(nontrap[x]) { bool all = true, one = false; for(int to : g[x]) { all &= trap[to]; one |= trap[to]; } if(A[x] && all) { nontrap[x] = 0, trap[x] = 1, R[x] = 0; did = 1; } else if(!A[x] && one) { nontrap[x] = 0, trap[x] = 1, R[x] = 0; did = 1; } } if(!did) { for(int x=0; x<n; ++x) if(nontrap[x]) { res[x] = 1; } break; } } 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...