제출 #744526

#제출 시각아이디문제언어결과실행 시간메모리
744526amirhoseinfar1385Game (APIO22_game)C++17
30 / 100
4034 ms77132 KiB
#include<bits/stdc++.h>
using namespace std;
const int maxn=300000+10,maxk=1000+10;
int fk=0,fn=0,f=0;
vector<int>adj[maxn],revadj[maxn];
char vis[maxn][maxk],revvis[maxn][maxk];

void dfs(int u,int v){
  if(revvis[u][v]==1){
    f=1;
  }
  vis[u][v]=1;
  for(auto x:adj[u]){
    if(vis[x][v]==0){
      dfs(x,v);
    }
  }
}

void revdfs(int u,int v){
  if(vis[u][v]==1){
    f=1;
  }
  revvis[u][v]=1;
  for(auto x:revadj[u]){
    if(revvis[x][v]==0){
      revdfs(x,v);
    }
  }
}

void con(int a,int b){
  if(a==b&&a<fk){
    f=1;
    return;
  }
  adj[a].push_back(b);
  revadj[b].push_back(a);
  for(int i=0;i<fk;i++){
    if(vis[a][i]==1&&vis[b][i]==0){
      dfs(b,i);
    }
    if(revvis[a][i]==0&&revvis[b][i]==1){
      revdfs(a,i);
    }
  }
}

void init(int n, int k) {
  for(int i=0;i<k;i++){
    vis[i][i]=revvis[i][i]=1;
  }
  fk=k;
  fn=n;
  for(int i=0;i<k-1;i++){
    con(i,i+1);
  }
}


int add_teleporter(int u, int v) {
  con(u,v);
  if(f){
    return 1;
  }
  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...