Submission #1362857

#TimeUsernameProblemLanguageResultExecution timeMemory
1362857jackhui100101Game (APIO22_game)C++20
0 / 100
6 ms15732 KiB
#include "game.h"
#include <bits/stdc++.h>
using namespace std;

int N = 3e5, n2, K, tin;
vector<vector<int>> to(N), rt(N);
vector<bool> vis(N);
vector<int> post_order, gp(N);

void dfs(int u){
    vis[u] = 1;
    for (int v: to[u]){
        if (!vis[v]) dfs(v);
    }
    post_order.push_back(u);
}

void rdfs(int u){
    vis[u] = 1;
    gp[u] = tin;
    for (int v: rt[u]){
        if (!vis[v]) rdfs(v);
    }
}

void init(int n, int k){
    K = k;
    n2 = n;
    for (int i = 0; i < k - 1; i++){
        to[i].push_back(i + 1);
        rt[i + 1].push_back(i);
    }
}

int add_teleporter(int u, int v){
    int n = n2;
    post_order.clear();
    for (int i = 0; i < n; i++){
        vis[i] = 0;
        gp[i] = -1;
    }
    if (u == v){
        if (u < K) return 1;
        return 0;
    }
    to[u].push_back(v);
    rt[v].push_back(u);
    for (int i = 0; i < n; i++){
        if (!vis[i]) dfs(i);
    }
    reverse(post_order.begin(), post_order.end());
    for (int i = 0; i < n; i++) vis[i] = 0;
    tin = 0;
    for (int u: post_order){
        if (!vis[u]){
            rdfs(u);
            tin++;
        }
    }
    vector<bool> b1(tin), b2(tin);
    for (int i = 0; i < n; i++){
        if (i < K) b1[gp[i]] = 1;
        else b2[gp[i]] = 1;
    }
    for (int i = 0; i < tin; i++){
        if (b1[i] && b2[i]) 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...