제출 #291137

#제출 시각아이디문제언어결과실행 시간메모리
291137shayan_pToy Train (IOI17_train)C++17
16 / 100
266 ms2944 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); d[i] = -1; } } while(sz(q)){ int u = q.front(); q.pop(); if(!pwr[u]){ for(int y : v[u]){ assert(d[y] < 0); } } for(int y : rv[u]){ if(!del[y] && who[y] && d[y] >= 0) q.push(y), d[y] = -1; if(!del[y] && !who[y] && --d[y] == 0) q.push(y), d[y] = -1; } } 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; } } } } 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]; } assert(sz(e1) == sz(e2)); for(int i = 0; i < sz(e1); i++){ v[e1[i]].PB(e2[i]); rv[e2[i]].PB(e1[i]); } while(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...