比赛 20200109 评测结果 AAAAAAAAAA
题目名称 猴腮雷 最终得分 100
用户昵称 数声风笛ovo 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2020-01-09 20:20:40
显示代码纯文本
#include<bits/stdc++.h> 
using namespace std;
int f[6001][2];
int a[6001];
bool root[6001];
vector <int> edge[6001];
int n,aa,bb,rt;
void dfs(int u,int fa){
	for(int i=0;i<edge[u].size();i++){
		int s=edge[u][i];
		if(fa==edge[u][i]){
			continue;
		}
		dfs(s,u);
		f[u][0]+=max(f[s][0],f[s][1]);
		f[u][1]+=f[s][0];
	}
	f[u][1]+=a[u]; 
}
int qwq(){
	freopen("monk.in","r",stdin);
	freopen("monk.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	for(int i=2;i<=n;i++){
		scanf("%d%d",&aa,&bb);
		edge[aa].push_back(bb);
		edge[bb].push_back(aa);
		root[aa]=1;
	}
	for(int i=1;i<=n;i++){
		if(root[i]==0){
			rt=i;
			break;
		}
	} 
	dfs(rt,0);
	printf("%d\n",max(f[rt][0],f[rt][1]));
	return 0;
}
int ovo=qwq();
int main(){;}