| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 1219908 | guagua0407 | Game (APIO22_game) | C++20 | 0 ms | 0 KiB | 
#include "game.h"
//#include "grader.cpp"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
#define f first
#define s second
#define all(x) x.begin(),x.end()
#define _ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
namespace{
    const int inf=1e9;
    vector<int> mn,mx;
    int k;
    vector<vector<int>> adj,adjr;
}
void init(int n, int _k) {
    k=_k;
    mn=vector<int>(n,inf);
    mx=vector<int>(n,-1);
    adj.resize(n);
    adjr.resize(n);
    for(int i=0;i<k;i++){
        mn[i]=mx[i]=i;
    }
}
int add_teleporter(int a, int b) {
    adj[a].push_back(b);
    adjr[b].push_back(a);
    if(max(a,b)<k) return b<=a;
    {
        int tmp=mn[b];
        if(tmp<mn[a]){
            mn[a]=tmp;
            queue<int> q;
            q.push(a);
            while(!q.empty()){
                int v=q.front();
                q.pop();
                for(auto u:adjr[v]){
                    if(mn[v]<mn[u]){
                        mn[u]=mn[v];
                        q.push(u);
                    }
                }
            }
        }
    }
    {
        int tmp=mx[a];
        if(tmp>mx[b]){
            mx[b]=tmp;
            queue<int> q;
            q.push(b);
            while(!q.empty()){
                int v=q.front();
                q.pop();
                for(auto u:adj[v]){
                    if(mx[v]>mx[u]){
                        mx[u]=mx[v];
                        q.push(u);
                    }
                }
            }
        }
    }
    //assert(a<b);
    return mn[v]<=mx[u];
}
