求解答
查看原帖
求解答
393811
大海中的孤帆楼主2023/10/6 15:22
#include<bits/stdc++.h>
using namespace std;
int n,tot;
vector < int > s[6010];
int v[6010],f[6010][2];
int kl[6010];
int l,k;
void dp(int x)
{
	f[x][0]=0;
	f[x][1]=kl[x];
	for(int i=0;i<s[x].size();++i)
	{
		int y=s[x][i];
		dp(y);
		f[x][0]+=max(f[y][0],f[y][1]);
		f[x][1]+=f[y][0];
	}
	return;
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;++i)
		cin>>kl[i];
	for(int i=1;i<n;++i)
	{
		cin>>l>>k;
		v[l]=1;
		s[k].push_back(l);
	}
	int g;
	for(int i=1;i<=n;++i)
	{
		if(!v[i])
		{
			g=i;
			break;
		}
	}
	dp(g);
	cout<<max(f[g][0],f[g][1]);
	return 0;
}

我一直没明白这里的f数组为什么要开二维,感觉一维也行

2023/10/6 15:22
加载中...