제출 #1166704

#제출 시각아이디문제언어결과실행 시간메모리
1166704Malix게임 (APIO22_game)C++20
0 / 100
0 ms408 KiB
#include "game.h"
#include <bits/stdc++.h>
using namespace std;
 
typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vii;
typedef pair<int,int> pi;
typedef vector<pi> pii;
typedef tuple<int,int,int> tii;
typedef vector<ll> li;
typedef vector<li> lii;
 
#define REP(i,a,b) for(int i=a;i<b;i++)
#define F first
#define S second
#define PB push_back
#define LSOne(s) ((s)&(-s))
 
const ll INF=1000000000000000010;
const int inf=1e9+10;
const ll M=1e9+7;

int n,k;
vii a,b;
vi p,q,arr;

void dfs1(int x,int y){
  arr.PB(x);
  p[x]=y;
  for(auto u:a[x])if(p[u]<y)dfs1(u,y);
}

void dfs2(int x,int y){
  arr.PB(x);
  q[x]=y;
  for(auto u:b[x])if(q[u]>y)dfs2(u,y);
}

void init(int N, int K) {
  n=N;k=K;
  a.resize(n);
  b.resize(n);
  p.resize(n,-1);
  q.resize(n,inf);
  REP(i,0,k)p[i]=i;
  REP(i,0,k)q[i]=i;
}

int add_teleporter(int u, int v) {
  if(u>=v&&u<k)return 1;
  if(u<k&&v<k)return 0;
  arr.clear();
  a[u].PB(v);
  b[v].PB(u);
  if(p[u]>p[v])dfs1(v,p[u]);
  if(q[u>q[v]])dfs2(u,q[v]);
  bool flag=0;
  for(auto u:arr)if(q[u]<=p[u])flag=1;
  return flag;
}
#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...