#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])) {
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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |