提交时,注意选择所期望的编译器类型。
#include<iostream>
#include<vector>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#define inf 99999999
using namespace std;
vector<int> g[10005];
int w[10005];
bool visited[10005];
int dist[10005];
int maxx=-inf;//纪律过程中的最大值
int dfs(int cur)
{
visited[cur]=1;
dist[cur]=w[cur];
for(int i=0;i<g[cur].size();i++)
if(!visited[g[cur][i]])
{
int t=dfs(g[cur][i]);
if(t>0)
dist[cur]+=t;
}
maxx=max(maxx,dist[cur]);
return dist[cur];
}
int main()
{
memset(visited,0,sizeof(visited));
memset(dist,0,sizeof(dist));
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>w[i];
for(int i=0;i<=n-2;i++)
{
int a,b;
cin>>a>>b;
g[a].push_back(b);
g[b].push_back(a);
}
dfs(2);
cout<<maxx<<endl;
return 0;
}