#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int nx=2e5+5;
ll n, q, u, v, a, b, used[nx], deg[nx], res[nx], up[nx], dn[nx], sm;
vector<tuple<ll ,ll, ll>> d[nx];
priority_queue<pair<ll, ll>, vector<pair<ll, ll>>, greater<pair<ll, ll>>> pq;
void dfs(int u, int p)
{
for (auto [v, a, b]:d[u])
{
if (v==p) continue;
up[v]=up[u]+b;
dn[v]=dn[u]+a;
sm+=a;
dfs(v, u);
}
}
int main()
{
cin.tie(NULL)->sync_with_stdio(false);
cin>>n;
for (int i=1; i<n; i++) cin>>u>>v>>a>>b, d[u].push_back({v, a, b}), d[v].push_back({u, b, a}), deg[u]++, deg[v]++;
for (int i=1; i<=n; i++) if (deg[i]==1) pq.push({0, i});
while (pq.size()>2)
{
auto [w, u]=pq.top();
pq.pop();
used[u]=1;
for (auto [v, a, b]:d[u])
{
if (!used[v])
{
w+=b;
u=v;
break;
}
}
if (--deg[u]==1) pq.push({w, u});
else res[pq.size()]=res[pq.size()+1]+w;
}
dfs(1, 1);
res[1]=1e18;
for (int i=1; i<=n; i++) res[1]=min(res[1], sm+up[i]-dn[i]);
cin>>q;
while (q--) cin>>u, cout<<res[u]<<'\n';
}
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |