#include "game.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define left dsafh
#define right dslafh
#define N 300000
#define L 19
bool left[L][N], right[L][N], done;
int ind[N];
vector<int> g[N], gg[N];
int k;
void build(int l, int r, int lvl) {
int m = l + r >> 1;
for (int i = l; i <= m; ++i)
left[lvl][i] = 1;
for (int i = m; i < r; ++i)
right[lvl][i] = 1;
if (l < m)
build(l, m, lvl + 1);
if (m + 1 < r)
build(m + 1, r, lvl + 1);
}
void init(int n, int k_) {
k = k_;
build(0, k, 0);
}
vector<int> ladd, radd;
void addright(int v, int lvl, int in) {
if (right[lvl][v])
return;
radd.push_back(v);
ind[v] = in;
right[lvl][v] = 1;
if (left[lvl][v])
done = 1;
for (int i = 0; i < (int)g[v].size(); ++i)
addright(g[v][i], lvl, in);
}
void addleft(int v, int lvl, int in) {
if (left[lvl][v])
return;
ladd.push_back(v);
ind[v] = in;
left[lvl][v] = 1;
if (right[lvl][v])
done = 1;
for (int i = 0; i < (int)gg[v].size(); ++i)
addleft(gg[v][i], lvl, in);
}
void run(int l, int r, int u, int v, bool edg, vector<int> &add, int lvl) {
if (!edg && add.empty())
return;
int m = l + r >> 1;
ladd.clear();
radd.clear();
for (int i = 0; i < (int)add.size(); ++i) {
int v = add[i];
for (int j = 0; j < (int)gg[v].size(); ++j)
if (right[lvl][gg[v][j]] && ind[gg[v][j]] == m)
addright(v, lvl, m);
for (int j = 0; j < (int)g[v].size(); ++j)
if (left[lvl][g[v][j]] && ind[g[v][j]] == m)
addleft(v, lvl, m);
}
if (edg) {
if (right[lvl][u])
addright(v, lvl, m);
if (left[lvl][v])
addleft(u, lvl, m);
}
vector<int> ladd1 = ladd, radd1 = radd;
if (m + 1 < r)
run(m + 1, r, u, v,
u != m && v != m && edg && right[lvl][u] && right[lvl][v], radd1,
lvl + 1);
if (l < m)
run(l, m, u, v, edg && u != m && v != m && left[lvl][u] && left[lvl][v],
ladd1, lvl + 1);
}
int add_teleporter(int u, int v) {
if (u == v && u < k)
return 1;
g[u].push_back(v);
gg[v].push_back(u);
vector<int> vec;
run(0, k, u, v, 1, vec, 0);
return done;
}
Compilation message
game.cpp: In function 'void build(int, int, int)':
game.cpp:17:13: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
17 | int m = l + r >> 1;
| ~~^~~
game.cpp: In function 'void run(int, int, int, int, bool, std::vector<int>&, int)':
game.cpp:61:13: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
61 | int m = l + r >> 1;
| ~~^~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
9 ms |
14288 KB |
Output is correct |
2 |
Correct |
8 ms |
14416 KB |
Output is correct |
3 |
Correct |
10 ms |
14408 KB |
Output is correct |
4 |
Correct |
8 ms |
14416 KB |
Output is correct |
5 |
Correct |
8 ms |
14416 KB |
Output is correct |
6 |
Correct |
8 ms |
14476 KB |
Output is correct |
7 |
Correct |
8 ms |
14416 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
9 ms |
14288 KB |
Output is correct |
2 |
Correct |
8 ms |
14416 KB |
Output is correct |
3 |
Correct |
10 ms |
14408 KB |
Output is correct |
4 |
Correct |
8 ms |
14416 KB |
Output is correct |
5 |
Correct |
8 ms |
14416 KB |
Output is correct |
6 |
Correct |
8 ms |
14476 KB |
Output is correct |
7 |
Correct |
8 ms |
14416 KB |
Output is correct |
8 |
Correct |
8 ms |
14416 KB |
Output is correct |
9 |
Correct |
9 ms |
14288 KB |
Output is correct |
10 |
Correct |
8 ms |
14416 KB |
Output is correct |
11 |
Correct |
10 ms |
14324 KB |
Output is correct |
12 |
Correct |
8 ms |
14416 KB |
Output is correct |
13 |
Correct |
8 ms |
14436 KB |
Output is correct |
14 |
Incorrect |
9 ms |
14416 KB |
Wrong Answer[1] |
15 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
9 ms |
14288 KB |
Output is correct |
2 |
Correct |
8 ms |
14416 KB |
Output is correct |
3 |
Correct |
10 ms |
14408 KB |
Output is correct |
4 |
Correct |
8 ms |
14416 KB |
Output is correct |
5 |
Correct |
8 ms |
14416 KB |
Output is correct |
6 |
Correct |
8 ms |
14476 KB |
Output is correct |
7 |
Correct |
8 ms |
14416 KB |
Output is correct |
8 |
Correct |
8 ms |
14416 KB |
Output is correct |
9 |
Correct |
9 ms |
14288 KB |
Output is correct |
10 |
Correct |
8 ms |
14416 KB |
Output is correct |
11 |
Correct |
10 ms |
14324 KB |
Output is correct |
12 |
Correct |
8 ms |
14416 KB |
Output is correct |
13 |
Correct |
8 ms |
14436 KB |
Output is correct |
14 |
Incorrect |
9 ms |
14416 KB |
Wrong Answer[1] |
15 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
9 ms |
14288 KB |
Output is correct |
2 |
Correct |
8 ms |
14416 KB |
Output is correct |
3 |
Correct |
10 ms |
14408 KB |
Output is correct |
4 |
Correct |
8 ms |
14416 KB |
Output is correct |
5 |
Correct |
8 ms |
14416 KB |
Output is correct |
6 |
Correct |
8 ms |
14476 KB |
Output is correct |
7 |
Correct |
8 ms |
14416 KB |
Output is correct |
8 |
Correct |
8 ms |
14416 KB |
Output is correct |
9 |
Correct |
9 ms |
14288 KB |
Output is correct |
10 |
Correct |
8 ms |
14416 KB |
Output is correct |
11 |
Correct |
10 ms |
14324 KB |
Output is correct |
12 |
Correct |
8 ms |
14416 KB |
Output is correct |
13 |
Correct |
8 ms |
14436 KB |
Output is correct |
14 |
Incorrect |
9 ms |
14416 KB |
Wrong Answer[1] |
15 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
9 ms |
14288 KB |
Output is correct |
2 |
Correct |
8 ms |
14416 KB |
Output is correct |
3 |
Correct |
10 ms |
14408 KB |
Output is correct |
4 |
Correct |
8 ms |
14416 KB |
Output is correct |
5 |
Correct |
8 ms |
14416 KB |
Output is correct |
6 |
Correct |
8 ms |
14476 KB |
Output is correct |
7 |
Correct |
8 ms |
14416 KB |
Output is correct |
8 |
Correct |
8 ms |
14416 KB |
Output is correct |
9 |
Correct |
9 ms |
14288 KB |
Output is correct |
10 |
Correct |
8 ms |
14416 KB |
Output is correct |
11 |
Correct |
10 ms |
14324 KB |
Output is correct |
12 |
Correct |
8 ms |
14416 KB |
Output is correct |
13 |
Correct |
8 ms |
14436 KB |
Output is correct |
14 |
Incorrect |
9 ms |
14416 KB |
Wrong Answer[1] |
15 |
Halted |
0 ms |
0 KB |
- |