WA2,8,9,10求调
查看原帖
WA2,8,9,10求调
496117
wyh0721楼主2024/7/29 09:25
#include <bits/stdc++.h>
using namespace std;
int n,a[6005],f[6005][2],ans[6005];
vector <int> v[6006]; 
int root;
bool vis[6005];
int dfs(int x,int o)
{
	if(f[x][o]!=-1044266559)
		return f[x][o];
	int s; 
	if(o==0)
	{
		s=0;
		for(int i=0;i<v[x].size();i++)
			s+=max(dfs(v[x][i],0),dfs(v[x][i],1));
	}
	if(o==1)
	{
		s=a[x];
		for(int i=0;i<v[x].size();i++)
			s+=dfs(v[x][i],0);
	}
	f[x][o]=s;
	return f[x][o];
}
int main()
{
	memset(f,-0x3f,sizeof(f));
	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[y].push_back(x);
		vis[x]=1;
		if(!vis[y])
			root=y;
	}
	cout<<max(dfs(root,0),dfs(root,1));
	return 0;
}

2024/7/29 09:25
加载中...