Submission #580201

#TimeUsernameProblemLanguageResultExecution timeMemory
580201pawnedGame (APIO22_game)C++17
60 / 100
4054 ms47176 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back typedef long long ll; typedef pair<int, int> ii; typedef vector<int> vi; int N, K; vi adj[300005]; vi rev[300005]; ii range[300005]; void init(int n, int k) { N = n; K = k; for (int i = 1; i < K; i++) { adj[i].pb(i + 1); rev[i + 1].pb(i); range[i] = {i, i}; } range[K] = {K, K}; for (int i = K + 1; i <= N; i++) { range[i] = {0, K + 1}; } } bool dfs(int u, int v) { if (range[u].se <= range[v].fi) // rip return false; if (range[u].fi >= range[v].se) // good return true; if (range[v].fi < range[u].fi) { range[v].fi = range[u].fi; for (int i : adj[v]) { if (dfs(v, i)) return true; } } if (range[u].se > range[v].se) { range[u].se = range[v].se; for (int i : rev[u]) { if (dfs(i, u)) return true; } } return false; } int add_teleporter(int u, int v) { u++; v++; if (u >= v && u <= K) return 1; if (u == v) return 0; adj[u].pb(v); rev[v].pb(u); return dfs(u, v); }
#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...