This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#pragma GCC optimize("Ofast,unroll-loops")
#include "game.h"
#ifndef EVAL
#include "game_grader.cpp"
#endif
#include <bits/stdc++.h>
#define ll long long
#define pii pair<int, int>
#define pll pair<ll, ll>
using namespace std;
namespace
{
int n, k, from[300000], to[300000];
vector<int> Ef[300000], Et[300000];
void update_from(int u)
{
for (auto v : Ef[u])
if (from[u] > from[v])
{
from[v] = from[u];
update_from(v);
}
}
void update_to(int u)
{
for (auto v : Et[u])
if (to[u] < to[v])
{
to[v] = to[u];
update_to(v);
}
}
}
void init(int n, int k)
{
::n = n, ::k = k;
for (int i = 0; i < k; i++)
from[i] = i, to[i] = i;
for (int i = k; i < n; i++)
from[i] = -1, to[i] = k + 1;
}
int add_teleporter(int u, int v)
{
if (u < k && v < k)
{
if (v <= u)
return 1;
return 0;
}
Ef[u].emplace_back(v);
Et[v].emplace_back(u);
from[v] = max(from[v], from[u]);
to[u] = min(to[u], to[v]);
bool flag = 0;
if (v >= k)
{
update_from(v);
flag |= (from[v] >= to[v]);
}
if (u >= k)
{
update_to(u);
flag |= (from[u] >= to[u]);
}
return flag;
}
# | 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... |