#include <bits/stdc++.h>
#include "factories.h"
using namespace std;
using ll = long long;
using pll = pair<ll, ll>;
const int maxn = 5e5 + 5;
int n, del[maxn], sub[maxn];
ll dist[maxn];
vector<vector<pll> > graph(maxn), anc(maxn);
int get_sub(int u, int p) {
sub[u] = 1;
for(auto &[v, _] : graph[u]) {
if(v == p || del[v]) continue;
sub[u] += get_sub(v, u);
}
return sub[u];
}
int get_cen(int u, int p, int sz) {
for(auto &[v, _] : graph[u]) {
if(v == p || del[v]) continue;
if(2 * sub[v] > sz) return get_cen(v, u, sz);
}
return u;
}
void get_dist(int u, int cen, int p, ll d) {
for(auto &[v, w] : graph[u]) {
if(v == p || del[v]) continue;
get_dist(v, cen, u, d + w);
}
anc[u].push_back({ cen, d });
}
void update(int u, int t) {
for(auto &[v, d] : anc[u]) {
if(t) dist[v] = min(dist[v], d);
else dist[v] = 1e18;
}
dist[u] = (t ? 0 : 1e18);
}
ll query(int u) {
ll ans = dist[u];
for(auto &[v, d] : anc[u])
ans = min(ans, d + dist[v]);
return ans;
}
void build(int u) {
int cen = get_cen(u, -1, get_sub(u, -1));
for(auto &[v, w] : graph[cen]) {
if(del[v]) continue;
get_dist(v, cen, cen, w);
}
del[cen] = 1;
for(auto &[v, w] : graph[cen]) {
if(del[v]) continue;
build(v);
}
}
void Init(int N, int A[], int B[], int D[]) {
n = N;
for(int i=0; i<n-1; i++) {
graph[A[i]].push_back({ B[i], D[i] });
graph[B[i]].push_back({ A[i], D[i] });
}
for(int i=0; i<n; i++) dist[i] = 1e18;
build(0);
}
ll Query(int S, int X[], int T, int Y[]) {
ll ans = 1e18;
for(int i=0; i<S; i++) update(X[i], 1);
for(int i=0; i<T; i++) ans = min(ans, query(Y[i]));
for(int i=0; i<S; i++) update(X[i], 0);
return ans;
}
Compilation message
factories.cpp: In function 'int get_sub(int, int)':
factories.cpp:16:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
16 | for(auto &[v, _] : graph[u]) {
| ^
factories.cpp: In function 'int get_cen(int, int, int)':
factories.cpp:24:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
24 | for(auto &[v, _] : graph[u]) {
| ^
factories.cpp: In function 'void get_dist(int, int, int, ll)':
factories.cpp:32:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
32 | for(auto &[v, w] : graph[u]) {
| ^
factories.cpp: In function 'void update(int, int)':
factories.cpp:40:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
40 | for(auto &[v, d] : anc[u]) {
| ^
factories.cpp: In function 'll query(int)':
factories.cpp:49:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
49 | for(auto &[v, d] : anc[u])
| ^
factories.cpp: In function 'void build(int)':
factories.cpp:57:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
57 | for(auto &[v, w] : graph[cen]) {
| ^
factories.cpp:64:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
64 | for(auto &[v, w] : graph[cen]) {
| ^
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
18 ms |
46472 KB |
Output is correct |
2 |
Correct |
194 ms |
49556 KB |
Output is correct |
3 |
Correct |
207 ms |
49804 KB |
Output is correct |
4 |
Correct |
204 ms |
50000 KB |
Output is correct |
5 |
Correct |
216 ms |
50336 KB |
Output is correct |
6 |
Correct |
157 ms |
49236 KB |
Output is correct |
7 |
Correct |
206 ms |
49800 KB |
Output is correct |
8 |
Correct |
208 ms |
50060 KB |
Output is correct |
9 |
Correct |
228 ms |
50332 KB |
Output is correct |
10 |
Correct |
149 ms |
48796 KB |
Output is correct |
11 |
Correct |
203 ms |
49748 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
10 ms |
46428 KB |
Output is correct |
2 |
Correct |
1695 ms |
197608 KB |
Output is correct |
3 |
Correct |
2570 ms |
253600 KB |
Output is correct |
4 |
Correct |
537 ms |
103728 KB |
Output is correct |
5 |
Correct |
3388 ms |
346528 KB |
Output is correct |
6 |
Correct |
2631 ms |
253628 KB |
Output is correct |
7 |
Correct |
653 ms |
92180 KB |
Output is correct |
8 |
Correct |
234 ms |
67008 KB |
Output is correct |
9 |
Correct |
748 ms |
97440 KB |
Output is correct |
10 |
Correct |
665 ms |
92540 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
18 ms |
46472 KB |
Output is correct |
2 |
Correct |
194 ms |
49556 KB |
Output is correct |
3 |
Correct |
207 ms |
49804 KB |
Output is correct |
4 |
Correct |
204 ms |
50000 KB |
Output is correct |
5 |
Correct |
216 ms |
50336 KB |
Output is correct |
6 |
Correct |
157 ms |
49236 KB |
Output is correct |
7 |
Correct |
206 ms |
49800 KB |
Output is correct |
8 |
Correct |
208 ms |
50060 KB |
Output is correct |
9 |
Correct |
228 ms |
50332 KB |
Output is correct |
10 |
Correct |
149 ms |
48796 KB |
Output is correct |
11 |
Correct |
203 ms |
49748 KB |
Output is correct |
12 |
Correct |
10 ms |
46428 KB |
Output is correct |
13 |
Correct |
1695 ms |
197608 KB |
Output is correct |
14 |
Correct |
2570 ms |
253600 KB |
Output is correct |
15 |
Correct |
537 ms |
103728 KB |
Output is correct |
16 |
Correct |
3388 ms |
346528 KB |
Output is correct |
17 |
Correct |
2631 ms |
253628 KB |
Output is correct |
18 |
Correct |
653 ms |
92180 KB |
Output is correct |
19 |
Correct |
234 ms |
67008 KB |
Output is correct |
20 |
Correct |
748 ms |
97440 KB |
Output is correct |
21 |
Correct |
665 ms |
92540 KB |
Output is correct |
22 |
Correct |
1977 ms |
206540 KB |
Output is correct |
23 |
Correct |
2017 ms |
211536 KB |
Output is correct |
24 |
Correct |
3137 ms |
255236 KB |
Output is correct |
25 |
Correct |
3169 ms |
257164 KB |
Output is correct |
26 |
Correct |
2982 ms |
256368 KB |
Output is correct |
27 |
Correct |
3916 ms |
337612 KB |
Output is correct |
28 |
Correct |
616 ms |
94200 KB |
Output is correct |
29 |
Correct |
3121 ms |
243428 KB |
Output is correct |
30 |
Correct |
3021 ms |
243692 KB |
Output is correct |
31 |
Correct |
3029 ms |
243580 KB |
Output is correct |
32 |
Correct |
832 ms |
90524 KB |
Output is correct |
33 |
Correct |
222 ms |
59904 KB |
Output is correct |
34 |
Correct |
469 ms |
75672 KB |
Output is correct |
35 |
Correct |
464 ms |
76452 KB |
Output is correct |
36 |
Correct |
648 ms |
84560 KB |
Output is correct |
37 |
Correct |
644 ms |
84564 KB |
Output is correct |