Submission #84502

#TimeUsernameProblemLanguageResultExecution timeMemory
84502mraronCop and Robber (BOI14_coprobber)C++14
100 / 100
875 ms7772 KiB
#include "coprobber.h" #include <bits/stdc++.h> using namespace std; const int COP=0, ROB=1; int deg[501][501][2]; int ans[501][501]; int start(int N, bool A[MAX_N][MAX_N]) { for(int c=0;c<N;++c) { for(int r=0;r<N;++r) { deg[c][r][COP]=1; deg[c][r][ROB]=count(A[r], A[r]+N, true); } } queue<array<int, 3>> q; for(int i=0;i<N;++i) { deg[i][i][COP]=deg[i][i][ROB]=0; q.push({i,i,0}); q.push({i,i,1}); } int cnt=0; while(!q.empty()) { auto fr=q.front(); q.pop(); //cerr<<fr[0]<<" "<<fr[1]<<" "<<fr[2]<<"\n"; cnt++; if(fr[2]==COP) { for(int i=0;i<N;++i) { if(A[i][fr[1]] && deg[fr[0]][i][ROB]) { deg[fr[0]][i][ROB]--; if(deg[fr[0]][i][ROB]==0) { q.push({fr[0], i, ROB}); } } } }else { for(int i=0;i<N;++i) { if((fr[0]==i||A[i][fr[0]]) && deg[i][fr[1]][COP]) { deg[i][fr[1]][COP]--; if(deg[i][fr[1]][COP]==0) { ans[i][fr[1]]=fr[0]; q.push({i, fr[1], COP}); } } } } } //cerr<<cnt<<" "<<2*N*N<<"\n"; return (cnt==2*N*N?0:-1); } int akt=0; int nextMove(int R) { return akt=ans[akt][R]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...