Submission #1367703

#TimeUsernameProblemLanguageResultExecution timeMemory
1367703sukritp5Game (APIO22_game)C++20
2 / 100
0 ms420 KiB
#include "game.h"
#include <bits/stdc++.h>
using namespace std;
const int MXN=3e5+7;
int in[MXN],out[MXN],p[MXN];//least out large in. if in > out return 1
int K;

int root(int u){
  if(p[u]==u)return u;
  return p[u]=root(p[u]);
}

void unite(int u,int v){
  int ru=root(u),rv=root(v);
  if(ru==rv)return;
  out[ru]=min(out[ru],out[rv]);
  in[ru]=max(in[ru],in[rv]);
  p[rv]=ru;
}

void init(int n, int k) {
  K=k;
  for(int i=0;i<n;++i){
    p[i]=i;
    in[i]=-1;
    out[i]=INT_MAX;
  }
}

int add_teleporter(int u, int v) {
  if(u<K&&v<K&&v<=u)return 1;
  else return 0;
  int ru=root(u),rv=root(v);
  if(v<K){
    out[ru]=min(out[ru],v);
    if(in[ru]>=out[ru])return 1;
  }
  else if(u<K){
    in[rv]=max(in[rv],u);
    if(in[rv]>=out[rv])return 1;
  }
  else{
    unite(v,u);
    if(in[rv]>=out[rv])return 1;
  }
  return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...