#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5;
int n;
struct Edges{
int v, w1, w2;
}; vector <Edges> g[maxn];
long long dp[maxn];
array <long long, 2> dp1[maxn];
array <long long, 3> dp2[maxn];
long long ans[maxn];
long long tot = 0;
void dfs(int u, int p){
for(auto e : g[u]){
int v = e.v, w2 = e.w2;
if(v == p) continue;
dfs(v, u);
dp[u]+= dp[v] + w2;
}
dp1[u] = {dp[u], u};
dp2[u] = {0, u, u};
for(auto e : g[u]){
int v = e.v, w1 = e.w1, w2 = e.w2;
if(v == p) continue;
dp2[u] = max(dp2[u], {dp1[v][0] + w1 + dp[u] - dp[v], u, dp1[v][1]});
dp2[u] = max(dp2[u], {dp1[u][0] + w1 - dp[v] + dp1[v][0], dp1[u][1], dp1[v][1]});
dp2[u] = max(dp2[u], {dp2[v][0] + w1 + dp[u] - dp[v] - w2, dp2[v][1], dp2[v][2]});
dp1[u] = max(dp1[v], {dp1[v][0] + w1 + dp[u] - dp[v], dp1[v][1]});
}
}
void dfs_reroot(int u, int p, long long cur){
ans[1] = min(ans[1], tot - cur);
for(auto e : g[u]){
int v = e.v, w1 = e.w1, w2 = e.w2;
if(v == p) continue;
dfs_reroot(v, u, cur - w2 + w1);
}
}
priority_queue <long long, vector <long long>> pq;
long long dfs_for_all(int u, int p){
if(u == dp2[1][2]) return 1e18;
vector <long long> zip;
for(auto e : g[u]){
int v = e.v, w1 = e.w1;
if(v == p) continue;
zip.push_back(dfs_for_all(v, u) + w1);
}
int pos = max_element(zip.begin(), zip.end()) - zip.begin();
for(int i = 0; i < (int)zip.size(); i++){
if(i == pos) pq.push(0);
else pq.push(zip[i]);
}
if(zip.empty()) return 0;
return zip[pos];
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for(int i = 1; i < n; i++){
int u, v, w1, w2; cin >> u >> v >> w1 >> w2;
g[u].push_back({v, w1, w2}); g[v].push_back({u, w2, w1});
tot+= w1 + w2;
}
memset(ans, 0x3f, sizeof ans);
dfs(1, 1);
ans[2] = tot - dp2[1][0];
dfs_reroot(1, 1, dp[1]);
dfs_for_all(1, 1);
for(int i = 3; i <= n; i++){
ans[i] = ans[i - 1] - pq.top();
pq.pop();
}
int q;
cin >> q;
while(q--){
int t; cin >> t;
cout << ans[t] << "\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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |