为什么不是从1开始dfs呢,我这样就只a了一个点
查看原帖
为什么不是从1开始dfs呢,我这样就只a了一个点
614984
NNNNzh楼主2022/3/23 14:30
#include<bits/stdc++.h>
using namespace std;
int n;
int r[10010];
int dp[10010][10010];
struct node{
	int to,next;
}edge[10010];
int head[10010];
int cnt;
void add(int u,int v)
{
	edge[++cnt].to=v;
	edge[cnt].next=head[u];
	head[u]=cnt;
}
void dfs(int x)
{
	for(int i=head[x];i;i=edge[i].next)
	{
		int y=edge[i].to;
		dfs(y);
		dp[x][0]+=max(dp[y][0],dp[y][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 l,k;
		cin>>l>>k;
		add(k,l);
	}
	for(int i=1;i<=n;i++)
	{
		dp[i][1]=r[i];
	}
	dfs(1);
	int ans;
	for(int i=1;i<=n;i++)
	{
		ans=max(dp[i][0],dp[i][1]);
	}
	cout<<ans;
 } 
2022/3/23 14:30
加载中...