Submission #211680

#TimeUsernameProblemLanguageResultExecution timeMemory
211680thebesBulb Game (FXCUP4_bulb)C++17
0 / 100
5 ms384 KiB
#include "bulb.h" #include <bits/stdc++.h> using namespace std; typedef vector<int> vi; typedef pair<int,int> pii; #define pb push_back const int MN = 3e5+5; int N, i, res[MN], w[MN][2], vs[MN], f, f2, f3, f4; pii ed[MN]; int acc(int n){ if(n<0) return 0; if(res[n]) return res[n]; res[n]=ed[n].first<0?ed[n].first:acc(ed[n].first); return res[n]; } void solve(int n){ if(n<0) return; if(vs[n]) return; vs[n] = 1; solve(ed[n].first); solve(ed[n].second); w[n][0]=ed[n].first<0?ed[n].first:w[ed[n].first][0]; if(ed[n].first>=0) w[n][1]|=w[ed[n].first][1]; if(ed[n].second>=0) w[n][1]|=(w[ed[n].second][0]==-1); else if(ed[n].second==-1) w[n][1]=1; } int ok(int n){ while(n>=0){ if(ed[n].second==-2||acc(ed[n].second)==-2) return 0; n=ed[n].first; } return n==-1; } int FindWinner(int T,vi L,vi R){ N = L.size(); int cur = 0; for(i=0;i<N;i++) ed[i]={L[i],R[i]}; while(cur>=0){ solve(ed[cur].second); if(!f2){ if(ok(ed[cur].second)) f=1; } if(ed[cur].second>=0){ if(w[ed[cur].second][1]) f3=1; if(ed[cur].second==-2||acc(ed[cur].second)==-2) f4=1; } if(ed[cur].second==-2||acc(ed[cur].second)==-2) f2++; cur = ed[cur].first; } if(acc(0)==-2) return 0; else return f|(f3&&(f2-f4==0)); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...