Submission #1228090

#TimeUsernameProblemLanguageResultExecution timeMemory
1228090m5588ohammedCop and Robber (BOI14_coprobber)C++20
16 / 100
144 ms6764 KiB
#include "coprobber.h" #include <bits/stdc++.h> using namespace std; int dis[501][501][2],dis2[501],parent[501][501][2]; int a[501][501],flag; vector <int> v[501]; int n,pos; void bfs(int bg){ for(int i=0;i<n;i++) dis[bg][i][0]=dis[bg][i][1]=1e9; queue <array<int,2>> qu; qu.push({bg,0}); dis[bg][bg][0]=0; while(!qu.empty()){ auto [i,u]=qu.front(); qu.pop(); for(int j:v[i]){ if(dis[bg][j][u^1]==1e9){ parent[bg][j][u^1]=i; dis[bg][j][u^1]=dis[bg][i][u]+1; qu.push({j,u^1}); } } } } void bfs2(int bg){ for(int i=0;i<n;i++) dis2[i]=1e9; queue <int> qu; qu.push(bg); dis2[bg]=0; while(!qu.empty()){ int i=qu.front(); qu.pop(); for(int j=0;j<n;j++){ if(a[i][j]==0) continue; if(dis2[j]==1e9){ dis2[j]=dis2[i]+1; qu.push(j); } } } return; } int start(int N, bool A[MAX_N][MAX_N]) { n=N; pos=0; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(A[i][j]==1) v[i].push_back(j); a[i][j]=A[i][j]; } if(v[i].size()==n-1) pos=i; } int mx=0; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(a[i][j]==1){ a[i][j]=a[j][i]=0; bfs2(i); if(dis2[j]!=1e9) mx=max(dis2[j]+1,mx); a[i][j]=a[j][i]=1; } } } for(int i=0;i<n;i++) bfs(i); //cout<<mx<<endl; if(mx>4) return -1; return 0; } int nextMove(int R) { if(a[R][pos]==1) return R; if(dis[R][pos][0]==1e9) return pos; pos=parent[R][pos][0]; return pos; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...