Submission #1155455

#TimeUsernameProblemLanguageResultExecution timeMemory
1155455Ludissey경찰관과 강도 (BOI14_coprobber)C++20
100 / 100
547 ms21544 KiB
#include "coprobber.h" #include <bits/stdc++.h> #define sz(a) (int)a.size() #define all(a) a.begin(), a.end() #define rall(a) a.rbegin(), a.rend() using namespace std; vector<vector<int>> neigh; vector<vector<vector<int>>> visited; vector<vector<int>> nxt; int pos=0; int start(int N, bool A[MAX_N][MAX_N]) { visited.resize(N,vector<vector<int>>(N,vector<int>(2,0))); neigh.resize(N); nxt.resize(N,vector<int>(N,0)); for (int i = 0; i < N; i++) { for (int j = i+1; j < N; j++) { if(A[i][j]) { neigh[i].push_back(j); neigh[j].push_back(i); } } } queue<pair<pair<int,int>,bool>> queue; vector<vector<int>> cnt(N,vector<int>(N,0)); for (int i = 0; i < N; i++) { queue.push({{i,i},true}); queue.push({{i,i},false}); } while(!queue.empty()){ int p=queue.front().first.first; int b=queue.front().first.second; int t=queue.front().second; queue.pop(); if(visited[p][b][t]==2) continue; visited[p][b][t]=2; if(!t){ for (auto u : neigh[b]) { cnt[p][u]++; if(cnt[p][u]==sz(neigh[u])) { if(visited[p][u][1]==0){ queue.push({{p,u},true}); visited[p][u][1]=1; } } } }else{ for (auto u : neigh[p]) { if(visited[u][b][false]==0) { nxt[u][b]=p; queue.push({{u,b},false}); visited[u][b][0]=1; } } if(visited[p][b][false]==0) { nxt[p][b]=p; queue.push({{p,b},false}); visited[p][b][0]=1; } } } for (int i = 0; i < N; i++) { bool b=true; for (int j = 0; j < N; j++) { if(!visited[i][j][1]) b=false; } if(b){ pos=i; return i; } } return -1; } int nextMove(int R) { return pos=nxt[pos][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...