题解:最大子树和
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;
}
以上是关于题解:最大子树和的主要内容,如果未能解决你的问题,请参考以下文章