球跳!
查看原帖
球跳!
1079531
lcycl楼主2024/12/6 19:53

悬棺
WA#11

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
int a[16001],f[16001][2];
bool v[16001];
vector<int> g[16001];
void dfs(int i){
	f[i][1]=a[i];
	f[i][0]=0;
	for(int j=0;j<g[i].size();j++){
		int k=g[i][j];
		dfs(k);
		f[i][0]+=f[k][0];
		f[i][1]+=max(f[k][0],f[k][1]);
	}
}
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=1;i<n;i++){
		int x,y;
		cin>>x>>y;
		v[x]=1;
		g[y].push_back(x);
	}
	int root=1;
	while(v[root]==1) root++;
	dfs(root);
	for(int i=1;i<=n;i++){
		cout<<f[i][0]<<" "<<f[i][1]<<"\n";
	}
	cout<<max(f[root][1],f[root][0]);
	return 0;
}
2024/12/6 19:53
加载中...