60 求调
查看原帖
60 求调
916767
Luogu_916767楼主2024/9/26 21:07
#include<bits/stdc++.h>

using namespace std;

int n;
int x,y;
int a[6005];
int dp[6005][2];
int fa[6005];
vector<int> m[6005];

int find(int x){
	if(fa[x] == x)return x;
	return find(fa[x]); 
} 

void dfs(int u){
	if(m[u].size() == 0){
		dp[u][1] = a[u];
		dp[u][0] = 0;
		return ;
	} 
	dp[u][1] = 1;
	for(int i = 0; i < m[u].size(); i ++ ){
		dfs(m[u][i]);
		dp[u][0] += max(dp[m[u][i]][1],dp[m[u][i]][0]);
		dp[u][1] += dp[m[u][i]][0];
	}
}

int main(){
	cin>>n;
	for(int i = 1; i <= n; i ++ ){
		cin>>a[i];
		fa[i] = i;
	}
	for(int i = 1; i < n; i ++ ){
		cin>>x>>y;
		fa[x] = y;
		m[y].push_back(x);
	}
	int fin = find(1);
	dfs(fin);
	cout<<max(0,max(dp[fin][0],dp[fin][1]));
}
2024/9/26 21:07
加载中...