This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define f(i,a,b) for(ll i = a; i < b; i++)
#define fa(i,a,b) for(ll i = a; i >= b; i--)
const int N = 50005;
const ll inf = 2e18;
int n, a[6], d[N], tin[N], tout[N], c, p[N][16];
vector <pair<int,int>> adj[N];
vector <int> aux;
void dfs(int u, int f){
p[u][0] = f;
f(i,1,16) p[u][i] = p[p[u][i-1]][i-1];
tin[u] = c++;
for(auto p: adj[u]){
int v = p.first, w = p.second;
if(v == f) continue;
d[v] = d[u] + w;
dfs(v, u);
}
tout[u] = c++;
}
bool is(int u, int v){
return tin[u] <= tin[v] and tout[u] >= tout[v];
}
int lca(int u, int v){
if(is(u, v)) return u;
if(is(v, u)) return v;
fa(i,15,0){
if(p[u][i] == 0 or is(p[u][i], v)) continue;
u = p[u][i];
}
return p[u][0];
}
int main(){
cin >> n;
f(i,1,n){
int u, v, w;
cin >> u >> v >> w;
u++, v++;
adj[u].push_back({v, w});
adj[v].push_back({u, w});
}
dfs(1, 0);
int qe; cin >> qe;
while(qe--){
bool fe = 0;
vector <pair<int,int>> v;
set <int> s;
f(i,1,6){
cin >> a[i];
a[i]++;
if(a[i] == 1) fe = 1;
v.push_back({tin[a[i]], a[i]});
s.insert(a[i]);
}
if(!fe){
v.push_back({tin[1], 1});
s.insert(1);
}
sort(v.begin(), v.end());
int ans = 0, l = v.size();
f(i,1,l){
//cout << v[i].second << " " << v[i-1].second << " " << lca(v[i].second, v[i-1].second) << "\n";
s.insert(lca(v[i].second, v[i-1].second));
}
v.clear();
for(int x: s) v.push_back({tin[x], x});
sort(v.begin(), v.end());
stack <int> q;
q.push(1);
l = v.size();
f(i,1,l){
int vi = v[i].second;
while(1){
int x = q.top();
if(is(x, vi)){
//cout << x << " " << vi << " " << d[vi] - d[x] << "\n";
ans += d[vi] - d[x];
if(x == 1){
aux.push_back(vi);
}
q.push(vi);
break;
}
q.pop();
}
}
if(aux.size() == 1 and !fe){
ans -= d[aux[0]];
}
aux.clear();
cout << ans << "\n";
}
return 0;
}
# | 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... |