Submission #1228100

#TimeUsernameProblemLanguageResultExecution timeMemory
1228100m5588ohammedCop and Robber (BOI14_coprobber)C++20
16 / 100
158 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;
    priority_queue <array<int,3>> qu;
    qu.push({0,bg,0});
    dis[bg][bg][0]=0;
    while(!qu.empty()){
        auto [mydis,i,u]=qu.top();
        mydis*=-1;
        qu.pop();
        if(dis[bg][i][u]<mydis) continue;
        for(int j:v[i]){
            if(dis[bg][j][u^1]>mydis+1){
                parent[bg][j][u^1]=i;
                dis[bg][j][u^1]=mydis+1;
                qu.push({dis[bg][j][u^1]*-1,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);
    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...