Submission #973792

#TimeUsernameProblemLanguageResultExecution timeMemory
973792PanndaGame (APIO22_game)C++17
60 / 100
4091 ms38416 KiB
#include "game.h"

#include <bits/stdc++.h>
using namespace std;

int n, k;
vector<vector<int>> adj;
vector<vector<int>> rev;
vector<int> highest;

void init(int n, int k) {
    ::n = n;
    ::k = k;
    adj.resize(n);
    rev.resize(n);
    highest.resize(n, k);
    for (int u = 0; u + 1 < k; u++) {
        int v = u + 1;
        adj[u].push_back(v);
        rev[v].push_back(u);
        highest[u] = v;
    }
}

int add_teleporter(int u, int v) {
    if (u == v && u < k) return 1;
    if (u == v) return 0;
    adj[u].push_back(v);
    rev[v].push_back(u);
    int h = v < k ? v : highest[v];
    bool wowie = false;
    auto dfs = [&](auto self, int u) -> void {
        if (highest[u] <= h) return;
        highest[u] = h;
        if (u < k && highest[u] <= u) wowie = true;
        for (int v : rev[u]) {
            self(self, v);
        }
    };
    dfs(dfs, u);
    return wowie;
}
#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...