30分求助,有关注!
查看原帖
30分求助,有关注!
1258313
aochiao楼主2024/5/13 20:27
#include<bits/stdc++.h>
using namespace std;
int r[100000],n,v[100000],dp[100000][2],root;
vector<int>g[100000];
void dfs(int x){
	dp[x][0]=0,dp[x][1]=r[x];
	for(int i=0;i<g[x].size();i++){
		int y=g[x][i];
		dfs(y);
		dp[x][0]+=max(dp[y][0],dp[x][1]),dp[x][1]+=dp[y][0];
	}
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>r[i];
	for(int i=1;i<n;i++){
		int x,y;
		cin>>x>>y;
		g[y].push_back(x),v[x]=1; 
	}
	for(int i=1;i<=n;i++) if(!v[i]){
		root=i;
		break;
	}
	dfs(root);
	cout<<max(dp[root][1],dp[root][0]);
	return 0;
}
2024/5/13 20:27
加载中...