题解:最大子树和

Posted skkyk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解:最大子树和相关的知识,希望对你有一定的参考价值。

题目链接

solution

板子题,从最大的下手找

#include<bits/stdc++.h>
using namespace std;
const int N = 16500;
int s[N],n;
struct node{
    int next,to;
}edge[N<<1];
int head[N],cnt;
inline void add(int from,int to) {
    edge[++cnt].to=to;edge[cnt].next=head[from];
    head[from]=cnt;
}
void dfs(int u,int f) {
    for(int i=head[u];i;i=edge[i].next) {
        int v=edge[i].to;
        if(v==f) continue;
        dfs(v,u);
        s[u]+=max(s[v],0);
    }
}
int main() {
    cin>>n;
    int root=0;s[root]=-1;
    for(int i=1;i<=n;i++) {cin>>s[i];if(s[i]>s[root]) root=i;}
    for(int i=1;i<n;i++) {
        int a,b;cin>>a>>b;
        add(a,b),add(b,a);
    }
    dfs(root,root);
    cout<<s[root];
    return 0;
}

以上是关于题解:最大子树和的主要内容,如果未能解决你的问题,请参考以下文章

[题解] [清华集训 2017] 榕树之心

洛谷P1122 最大子树和

P1352 没有上司的舞会 题解

GDFZOJ 美丽树

HDU2795 Billboard 题解

二叉树 基础题解