其他分享
首页 > 其他分享> > P1122 最大子树和 (树形dp

P1122 最大子树和 (树形dp

作者:互联网

添加链接描述

#include<bits/stdc++.h>
using namespace std;
const int N=32009;
int w[N];
int e[N],h[N],ne[N],idx,vis[N];
void add(int a,int b){
    e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
int dp[N];
void dfs(int u,int fa){
    dp[u]=w[u];
    for(int i=h[u];~i;i=ne[i]){
        int j=e[i];
        if(j!=fa){
            dfs(j,u);
            if(dp[j]>0){
            dp[u]+=dp[j];
            }
        }
        
    }
}
int main(){
    memset(h,-1,sizeof h);
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>w[i];
    }
    for(int i=1;i<n;i++){
        int a,b;
        cin>>a>>b;
        add(a,b);
        add(b,a);
    }
    dfs(1,0);
    int ans=-0x3f3f3f3f;
    for(int i=1;i<=n;i++)ans=max(ans,dp[i]);
    cout<<ans<<endl;
    return 0;
}

标签:子树,idx,int,ne,dfs,add,P1122,dp
来源: https://blog.csdn.net/Minelois/article/details/120142128