https://www.luogu.com.cn/problem/P1122
rt 我的代码:
#include<bits/stdc++.h>
#define N 100005
using namespace std;
struct node{
int nxt,to;
}edge[2*N];
int ans=-1,dp[N],head[N],n,u,v,cnt,a[N],rd[N],root;
void add(int u,int v){
cnt++;
edge[cnt].nxt=head[u];
edge[cnt].to=v;
head[u]=cnt;
}
void dfs(int x,int father){
dp[x]=max(a[x],0);
for(int i=head[x];i;i=edge[i].nxt){
int y=edge[i].to;
if(y==father)
continue;
dfs(y,x);
if(dp[y]>0)
dp[x]+=dp[y];
}
ans=max(dp[x],ans);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<n;i++){
cin>>u>>v;
add(u,v);
rd[v]++;
add(v,u);
}
for(int i=1;i<=n;i++)
if(rd[i]==0){
root=i;
break;
}
dfs(root,0);
cout<<ans;
return 0;
}
样例能过 全部WA