#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx,avx2,bmi,bmi2,popcnt,lzcnt")
#include <bits/stdc++.h>
#include "factories.h"
using namespace std;
const int L = 19;
struct node {
vector<pair<node*,int>> l;
long long d;
int depth;
node* anc[L];
node* par;
bool v = false;
int sz;
long long cl = LONG_LONG_MAX;
};
node* lca(node* u, node* v){
if(u->depth < v->depth) swap(u, v);
int d = u->depth-v->depth;
for(int i = 0;i < L;i++) if((d>>i)&1) u = u->anc[i];
if(u == v) return u;
for(int i = L-1;i >= 0;i--){
if(u->anc[i] != v->anc[i]) {
u = u->anc[i];
v = v->anc[i];
}
}
return u->anc[0];
}
int tot;
void ffs(node* n, node* p, long long d, int depth){
n->d = d;
n->depth = depth;
n->anc[0] = p;
for(int i = 1;i < L;i++) n->anc[i] = n->anc[i-1]->anc[i-1];
for(auto [c, l] : n->l){
if(c != p) ffs(c, n, d+l, depth+1);
}
}
void dfs(node* n, node* p){
n->sz = 1;
for(auto [c, d] : n->l){
if(c == p || c->v) continue;
dfs(c, n);
n->sz += c->sz;
}
}
node* cent(node* n, node* p){
for(auto [c,d]:n->l){
if(c==p||c->v) continue;
if(c->sz>tot/2){
return cent(c, n);
}
}
n->v = true;
for(auto [c,d] : n->l){
if(c->v) continue;
dfs(c, n);
tot = c->sz;
node* ce = cent(c, n);
ce->par = n;
}
return n;
}
vector<node> g;
void Init(int N, int A[], int B[], int D[]) {
g.resize(N);
for(int i = 0;i < N-1;i++){
g[A[i]].l.emplace_back(&g[B[i]], D[i]);
g[B[i]].l.emplace_back(&g[A[i]], D[i]);
}
tot = N;
ffs(&g[0], &g[0], 0, 0);
dfs(&g[0], NULL);
cent(&g[0], NULL)->par = NULL;
}
long long Query(int S, int X[], int T, int Y[]) {
vector<node*> t;
for(int i = 0;i < S;i++){
node* x = &g[X[i]];
while(x != NULL){
t.push_back(x);
x->cl = min(x->cl, x->d+g[X[i]].d-2*lca(&g[X[i]], x)->d);
x = x->par;
}
}
long long ans = LONG_LONG_MAX;
for(int i = 0;i < T;i++){
node* y = &g[Y[i]];
while(y != NULL){
if(y->cl != LONG_LONG_MAX) ans = min(ans, y->d+g[Y[i]].d-2*lca(&g[Y[i]], y)->d+y->cl);
y = y->par;
}
}
for(node* n : t) n->cl = LONG_LONG_MAX;
return ans;
}
Compilation message
factories.cpp: In function 'void ffs(node*, node*, long long int, int)':
factories.cpp:36:12: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
36 | for(auto [c, l] : n->l){
| ^
factories.cpp: In function 'void dfs(node*, node*)':
factories.cpp:42:12: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
42 | for(auto [c, d] : n->l){
| ^
factories.cpp: In function 'node* cent(node*, node*)':
factories.cpp:49:12: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
49 | for(auto [c,d]:n->l){
| ^
factories.cpp:56:12: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
56 | for(auto [c,d] : n->l){
| ^
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
11 ms |
16984 KB |
Output is correct |
2 |
Correct |
424 ms |
29908 KB |
Output is correct |
3 |
Correct |
866 ms |
29776 KB |
Output is correct |
4 |
Correct |
729 ms |
30832 KB |
Output is correct |
5 |
Correct |
1016 ms |
30296 KB |
Output is correct |
6 |
Correct |
180 ms |
29780 KB |
Output is correct |
7 |
Correct |
859 ms |
30024 KB |
Output is correct |
8 |
Correct |
899 ms |
29992 KB |
Output is correct |
9 |
Correct |
1048 ms |
30460 KB |
Output is correct |
10 |
Correct |
179 ms |
29776 KB |
Output is correct |
11 |
Correct |
860 ms |
29776 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
4 ms |
16984 KB |
Output is correct |
2 |
Correct |
1373 ms |
164764 KB |
Output is correct |
3 |
Correct |
2745 ms |
166936 KB |
Output is correct |
4 |
Correct |
571 ms |
162576 KB |
Output is correct |
5 |
Correct |
4038 ms |
181584 KB |
Output is correct |
6 |
Correct |
2941 ms |
167576 KB |
Output is correct |
7 |
Correct |
1983 ms |
55760 KB |
Output is correct |
8 |
Correct |
339 ms |
54976 KB |
Output is correct |
9 |
Correct |
2101 ms |
57812 KB |
Output is correct |
10 |
Correct |
1908 ms |
56196 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
11 ms |
16984 KB |
Output is correct |
2 |
Correct |
424 ms |
29908 KB |
Output is correct |
3 |
Correct |
866 ms |
29776 KB |
Output is correct |
4 |
Correct |
729 ms |
30832 KB |
Output is correct |
5 |
Correct |
1016 ms |
30296 KB |
Output is correct |
6 |
Correct |
180 ms |
29780 KB |
Output is correct |
7 |
Correct |
859 ms |
30024 KB |
Output is correct |
8 |
Correct |
899 ms |
29992 KB |
Output is correct |
9 |
Correct |
1048 ms |
30460 KB |
Output is correct |
10 |
Correct |
179 ms |
29776 KB |
Output is correct |
11 |
Correct |
860 ms |
29776 KB |
Output is correct |
12 |
Correct |
4 ms |
16984 KB |
Output is correct |
13 |
Correct |
1373 ms |
164764 KB |
Output is correct |
14 |
Correct |
2745 ms |
166936 KB |
Output is correct |
15 |
Correct |
571 ms |
162576 KB |
Output is correct |
16 |
Correct |
4038 ms |
181584 KB |
Output is correct |
17 |
Correct |
2941 ms |
167576 KB |
Output is correct |
18 |
Correct |
1983 ms |
55760 KB |
Output is correct |
19 |
Correct |
339 ms |
54976 KB |
Output is correct |
20 |
Correct |
2101 ms |
57812 KB |
Output is correct |
21 |
Correct |
1908 ms |
56196 KB |
Output is correct |
22 |
Correct |
2123 ms |
174140 KB |
Output is correct |
23 |
Correct |
1987 ms |
182208 KB |
Output is correct |
24 |
Correct |
5201 ms |
184392 KB |
Output is correct |
25 |
Correct |
5155 ms |
173204 KB |
Output is correct |
26 |
Correct |
5142 ms |
157592 KB |
Output is correct |
27 |
Correct |
7424 ms |
183312 KB |
Output is correct |
28 |
Correct |
708 ms |
179380 KB |
Output is correct |
29 |
Correct |
4847 ms |
181152 KB |
Output is correct |
30 |
Correct |
5021 ms |
180884 KB |
Output is correct |
31 |
Correct |
5220 ms |
181300 KB |
Output is correct |
32 |
Correct |
2683 ms |
79516 KB |
Output is correct |
33 |
Correct |
336 ms |
62612 KB |
Output is correct |
34 |
Correct |
862 ms |
61072 KB |
Output is correct |
35 |
Correct |
851 ms |
61008 KB |
Output is correct |
36 |
Correct |
2166 ms |
62016 KB |
Output is correct |
37 |
Correct |
2025 ms |
61732 KB |
Output is correct |