#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
const int N = 100000;
const i64 inf = 1e18;
int n, s, q, E, t = 0;
vector<i64> in(N), out(N), shop(N), x(N, inf), dp(N), d(N);
vector<pair<int, int>> e;
vector<vector<pair<int, int>>> g(N);
vector<vector<i64>> go(N, vector<i64>(18)), mn(N, vector<i64>(18));
void dfs(int u, int p) {
in[u] = t++;
go[u][0] = p;
if (shop[u]) {
x[u] = d[u];
}
for (auto [v, w] : g[u]) {
if (v != p) {
d[v] = d[u] + w;
dfs(v, u);
x[u] = min(x[u], x[v]);
}
}
dp[u] = (x[u] == inf ? inf : x[u] - 2 * d[u]);
mn[u][0] = dp[u];
out[u] = t++;
}
bool is_ancestor(int u, int v) {
return (in[u] <= in[v] && out[u] >= out[v]);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> s >> q >> E;
--E;
for (int i = 0; i < n - 1; i++) {
int u, v, w;
cin >> u >> v >> w;
--u;
--v;
e.emplace_back(u, v);
g[u].emplace_back(v, w);
g[v].emplace_back(u, w);
}
for (int i = 0; i < s; i++) {
int u;
cin >> u;
shop[u - 1] = 1;
}
dfs(E, E);
for (int b = 1; b < 18; b++) {
for (int i = 0; i < n; i++) {
go[i][b] = go[go[i][b - 1]][b - 1];
mn[i][b] = min(mn[i][b - 1], mn[go[i][b - 1]][b - 1]);
}
}
while (q--) {
int i, r;
cin >> i >> r;
--i; --r;
auto [u, v] = e[i];
if (is_ancestor(u, v)) {
swap(u, v);
}
if (!is_ancestor(u, r)) {
cout << "escaped\n";
} else {
i64 best = dp[u], dd = d[r];
for (int b = 17; b >= 0; b--) {
if (is_ancestor(u, go[r][b])) {
best = min(best, mn[r][b]);
r = go[r][b];
}
}
if (best == inf) {
cout << "oo\n";
} else {
cout << dd + best << '\n';
}
}
}
}
Compilation message
valley.cpp: In function 'void dfs(int, int)':
valley.cpp:21:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
21 | for (auto [v, w] : g[u]) {
| ^
valley.cpp: In function 'int main()':
valley.cpp:73:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
73 | auto [u, v] = e[i];
| ^
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
33 ms |
43384 KB |
Output is correct |
2 |
Correct |
32 ms |
43412 KB |
Output is correct |
3 |
Correct |
33 ms |
43512 KB |
Output is correct |
4 |
Correct |
33 ms |
43496 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
33 ms |
43384 KB |
Output is correct |
2 |
Correct |
32 ms |
43412 KB |
Output is correct |
3 |
Correct |
33 ms |
43512 KB |
Output is correct |
4 |
Correct |
33 ms |
43496 KB |
Output is correct |
5 |
Correct |
28 ms |
43372 KB |
Output is correct |
6 |
Correct |
32 ms |
43416 KB |
Output is correct |
7 |
Correct |
29 ms |
43396 KB |
Output is correct |
8 |
Correct |
29 ms |
43424 KB |
Output is correct |
9 |
Correct |
31 ms |
43468 KB |
Output is correct |
10 |
Correct |
32 ms |
43404 KB |
Output is correct |
11 |
Correct |
29 ms |
43376 KB |
Output is correct |
12 |
Correct |
32 ms |
43356 KB |
Output is correct |
13 |
Correct |
37 ms |
43400 KB |
Output is correct |
14 |
Correct |
33 ms |
43492 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
217 ms |
48704 KB |
Output is correct |
2 |
Correct |
232 ms |
52252 KB |
Output is correct |
3 |
Correct |
261 ms |
52200 KB |
Output is correct |
4 |
Correct |
284 ms |
53864 KB |
Output is correct |
5 |
Correct |
260 ms |
54120 KB |
Output is correct |
6 |
Correct |
300 ms |
55912 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
33 ms |
43384 KB |
Output is correct |
2 |
Correct |
32 ms |
43412 KB |
Output is correct |
3 |
Correct |
33 ms |
43512 KB |
Output is correct |
4 |
Correct |
33 ms |
43496 KB |
Output is correct |
5 |
Correct |
28 ms |
43372 KB |
Output is correct |
6 |
Correct |
32 ms |
43416 KB |
Output is correct |
7 |
Correct |
29 ms |
43396 KB |
Output is correct |
8 |
Correct |
29 ms |
43424 KB |
Output is correct |
9 |
Correct |
31 ms |
43468 KB |
Output is correct |
10 |
Correct |
32 ms |
43404 KB |
Output is correct |
11 |
Correct |
29 ms |
43376 KB |
Output is correct |
12 |
Correct |
32 ms |
43356 KB |
Output is correct |
13 |
Correct |
37 ms |
43400 KB |
Output is correct |
14 |
Correct |
33 ms |
43492 KB |
Output is correct |
15 |
Correct |
217 ms |
48704 KB |
Output is correct |
16 |
Correct |
232 ms |
52252 KB |
Output is correct |
17 |
Correct |
261 ms |
52200 KB |
Output is correct |
18 |
Correct |
284 ms |
53864 KB |
Output is correct |
19 |
Correct |
260 ms |
54120 KB |
Output is correct |
20 |
Correct |
300 ms |
55912 KB |
Output is correct |
21 |
Correct |
249 ms |
52000 KB |
Output is correct |
22 |
Correct |
215 ms |
51712 KB |
Output is correct |
23 |
Correct |
232 ms |
51776 KB |
Output is correct |
24 |
Correct |
296 ms |
53632 KB |
Output is correct |
25 |
Correct |
271 ms |
56636 KB |
Output is correct |
26 |
Correct |
204 ms |
51972 KB |
Output is correct |
27 |
Correct |
219 ms |
51736 KB |
Output is correct |
28 |
Correct |
261 ms |
51588 KB |
Output is correct |
29 |
Correct |
297 ms |
52980 KB |
Output is correct |
30 |
Correct |
310 ms |
54476 KB |
Output is correct |
31 |
Correct |
206 ms |
52036 KB |
Output is correct |
32 |
Correct |
211 ms |
51716 KB |
Output is correct |
33 |
Correct |
229 ms |
51912 KB |
Output is correct |
34 |
Correct |
301 ms |
53544 KB |
Output is correct |
35 |
Correct |
278 ms |
56304 KB |
Output is correct |
36 |
Correct |
292 ms |
53836 KB |
Output is correct |