제출 #704033

#제출 시각아이디문제언어결과실행 시간메모리
704033Abrar_Al_Samit장난감 기차 (IOI17_train)C++17
100 / 100
1642 ms1656 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> 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]); } vector<int>nontrap(n), trap(n), need(n); int tt = n; while(tt--) { 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); } } } 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) || (!A[x] && one)) { nontrap[x] = 0, trap[x] = 1, R[x] = 0; } } } return nontrap; }
#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...