比赛 20200109 评测结果 AAAAAAAAAA
题目名称 猴腮雷 最终得分 100
用户昵称 云卷云书 运行时间 0.032 s
代码语言 C++ 内存使用 14.04 MiB
提交时间 2019-12-25 21:47:11
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
vector<int > son[10007];
int f[10007][2],v[10007],h[10007],n,root;
void dp(int x){
	f[x][0]=0;
	f[x][1]=h[x];
	for(int i=0;i<son[x].size();i++){
		int y=son[x][i];
		dp(y);
		f[x][0]+=max(f[y][0],f[y][1]);
		f[x][1]+=f[y][0];
	}
	return; 
}
int main(){
	freopen("monk.in","r",stdin);
	freopen("monk.out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++) scanf("%d",&h[i]);
	for(int i=1;i<=n;i++){
		int x,y;
		scanf("%d%d",&x,&y);
		v[x]=1;
		son[y].push_back(x);
	}
	for(int i=1;i<=n;i++){
		if(!v[i]) {
		root=i;
		break;}
	}
	dp(root);
	cout<<max(f[root][1],f[root][0])<<endl;
}