This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "game.h"
#include <bits/stdc++.h>
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define pb push_back
#define mp make_pair
#define pii pair<int, int>
using namespace std;
typedef long long ll;
const int MAXN = (int)1e6 + 7;
const int LG = 60;
int dp[MAXN], pd[MAXN];
vector<int> adj[MAXN][2];
bool seen[MAXN];
int N, K, X;
bool check(int x) {
if (dp[x] <= pd[x]) return 1;
return 0;
}
void init(int n, int k) {
N = n;
K = k;
for (int i=0; i<N; i++) dp[i] = pd[i] = -1;
}
void DFS(int v, bool b) {
seen[v] = 1;
if (b) dp[v] = (dp[v] == -1? X : min(dp[v], X));
else pd[v] = (pd[v] == -1? X : max(pd[v], X));
for (int u:adj[v][b]) if (!seen[u]) DFS(u, b);
}
int add_teleporter(int u, int v) {
if (u < K && v < K) {
if (u >= v) return 1;
return 0;
}
adj[u][0].pb(v); adj[v][1].pb(u);
fill(seen, seen+N+1, 0);
if (u < K) {
X = u;
DFS(u, 0);
} else if (v < K) {
X = v;
DFS(v, 1);
} else {
X = pd[u];
DFS(u, 0);
}
for (int i=K; i<N; i++) if (dp[i] != -1 && pd[i] != -1 && dp[i] <= pd[i]) return 1;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |