0ptsRE求条
查看原帖
0ptsRE求条
979584
zafa2023楼主2024/11/30 21:13
#include<bits/stdc++.h>
using namespace std;
const int maxn=6000+1;
vector<int>s[maxn];
int root;
int h[maxn],d[maxn],f[maxn][2],n;
int dfs(int x){
	f[x][0]=0;
	f[x][1]=h[x];
	for(int i=0;i<s[x].size();i++){
		int y=s[x][i];
		dfs(y);
		f[x][0]+=max(f[y][0],f[y][1]);
		f[x][1]+=f[y][0];
	}
}
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>h[i];
	}
	for(int i=1;i<=n-1;i++){
		int x,y;
		cin>>x>>y;
		d[x]=1;
		s[y].push_back(x);
	}
	for(int i=1;i<=n;i++){
	 	if(!d[i]){
	 		root=i;
	 		break;
		 }
	}
	dfs(root);
	cout<<max(f[root][0],f[root][1]);
	return 0;
}

2024/11/30 21:13
加载中...