제출 #291117

#제출 시각아이디문제언어결과실행 시간메모리
291117shayan_pToy Train (IOI17_train)C++17
11 / 100
245 ms1528 KiB
#include<bits/stdc++.h> #include "train.h" #define F first #define S second #define PB push_back #define sz(s) (int(s.size())) #define bit(n, k) (((n)>>(k))&1) using namespace std; typedef pair<int, int> pii; typedef long long ll; const int maxn = 5010, inf = 1e9 + 10, mod = 1e9 + 7; bool who[maxn], del[maxn], pwr[maxn]; vector<int> v[maxn], rv[maxn]; int n; int d[maxn]; bool iter(){ for(int i = 0; i < n; i++){ d[i] = sz(v[i]); } queue<int> q; for(int i = 0; i < n; i++){ if(pwr[i] && !del[i]){ q.push(i); } } while(sz(q)){ int u = q.front(); q.pop(); d[u] = -1; for(int y : rv[u]){ if(!del[y] && who[y] && d[y] >= 0) q.push(y); if(!del[y] && !who[y] && --d[y] == 0) q.push(y); } } bool yes = 0; for(int i = 0; i < n; i++){ if(!del[i] && d[i] >= 0) del[i] = 1, yes = 1; } for(int i = 0; i < n; i++){ if(pwr[i] && !del[i]){ bool any = 0, all = 1; for(int x : v[i]) any|= del[x], all&= del[x]; if(who[i]){ if(all){ del[i] = 1; yes = 1; } } else{ if(any){ del[i] = 1; yes = 1; } } } } ///// chert for(int i = 0; i < n; i++){ if(!del[i]){ bool any = 0; for(int x : v[i]) any|= del[x]; if(any) del[i] = 1, yes = 1; } } return yes; } vector<int> who_wins(vector<int> _a, vector<int> _r, vector<int> e1, vector<int> e2){ ::n = sz(_a); for(int i = 0; i < n; i++){ who[i] = _a[i]; pwr[i] = _r[i]; } for(int i = 0; i < sz(e1); i++){ v[e1[i]].PB(e2[i]); rv[e2[i]].PB(e1[i]); } int DID = 0; while(DID <= 5){ DID+= !iter(); } vector<int> ans; for(int i = 0; i < n; i++){ ans.PB(!del[i]); } 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...