제출 #221800

#제출 시각아이디문제언어결과실행 시간메모리
221800patrikpavic2장난감 기차 (IOI17_train)C++17
100 / 100
494 ms1792 KiB
/** * user: ppavic * fname: Patrik * lname: Pavić * task: train * score: 100.0 * date: 2019-06-12 09:27:16.425930 */ #include "train.h" #include <vector> #include <cstring> #include <queue> #define PB push_back using namespace std; typedef vector < int > vi; const int N = 5055; int spas[N]; /// HDZ int smrt[N]; /// SDP int n; vi v[N], r[N]; int cnt[N], izb[N]; queue < int > Q; vi who_wins(vi a, vi rr, vi uu, vi vv) { n = a.size(); for(int i = 0;i < (int)vv.size();i++){ v[uu[i]].PB(vv[i]); r[vv[i]].PB(uu[i]); } int kol = 0; for(;;kol++){ memset(spas, 0, sizeof(spas)); memset(smrt, 0, sizeof(smrt)); memset(cnt, 0, sizeof(cnt)); for(int i = 0;i < n;i++){ if(izb[i]) continue; if(rr[i] == 1) smrt[i] = 1, Q.push(i); else if(a[i] == 1) cnt[i] = 1; else { cnt[i] = 0; for(int x : v[i]) cnt[i] += !izb[x]; } } for(;!Q.empty();Q.pop()){ int cur = Q.front(); for(int x : r[cur]){ if(izb[x]) continue; cnt[x]--; if(cnt[x] == 0 && !smrt[x]){ smrt[x] = 1; Q.push(x); } } } for(int i = 0;i < n;i++){ if(izb[i]) continue; if(smrt[i] == 0) spas[i] = 1, Q.push(i), cnt[i] = 0; else if(a[i] == 0) cnt[i] = 1; else { cnt[i] = 0; for(int x : v[i]) cnt[i] += !izb[x]; } } for(;!Q.empty();Q.pop()){ int cur = Q.front(); for(int x : r[cur]){ if(izb[x]) continue; cnt[x]--; if(cnt[x] == 0 && !spas[x]){ spas[x] = 1; Q.push(x); } } } int cc = 0; for(int i = 0;i < n;i++) if(spas[i] && !izb[i]) cc++, izb[i] = 1; if(cc == 0) break; } vi sol; for(int i = 0;i < n;i++) sol.PB(!izb[i]); return sol; }
#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...