20pts求调
查看原帖
20pts求调
1076621
Xiaonao_Dali楼主2025/7/24 11:12
#include<bits/stdc++.h>
using namespace std;
int n;
int w[105];
vector<int> g[105];
int sum_x[105];
int size[105];
int ans=1e9;
void dfs1(int x,int parent){
    size[x]=w[x];
    sum_x[x]=0;
    for(int y:g[x]){
        if(y!=parent){
            dfs1(y,x);
            size[x]+=size[y];
            sum_x[x]+=sum_x[y]+size[y];
        }
    }
}
void dfs2(int x,int parent){
    ans=min(ans,sum_x[x]);
    for(int y:g[x]){
        if(y!=parent){
            sum_x[y]+=sum_x[x]-size[y]+(size[1]-size[y]);
            dfs2(y,x);
        }
    }
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        int u,v;
        cin>>w[i]>>u>>v;
        if(u!=0){
            g[i].push_back(u);
            g[u].push_back(i);
        }
        if(v!=0){
            g[i].push_back(v);
            g[v].push_back(i);
        }
    }
    dfs1(1,-1);
    dfs2(1,-1);
    cout<<ans;
}

请不要在解答时说出不文明语言!

2025/7/24 11:12
加载中...