全MLE 求助
查看原帖
全MLE 求助
551972
Friends_priceless楼主2023/10/21 17:20
#include<bits/stdc++.h>
using namespace std;
int fa[6010];
vector<int> son[6010];
int r[6010];
int dp[6010][2];
int n;
int x,y;
void dfs(int x){
	dp[x][1]=r[x];
	dp[x][0]=0;//取或不取
	for(int i=0;i<son[x].size();i++)
	{
		int s=son[x][i];
		dfs(s);
		dp[x][0]+=max(dp[s][0],dp[s][1]);//找取或不取中的最大值
		dp[x][1]+=dp[s][0];//已取上级,只能不取 
	 } 
	dp[x][1]+=r[x];
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>r[i];
		while(scanf("%d%d",&x,&y)==2,x!=0||y!=0)
		son[y].push_back(x);
		fa[x]=y;
	}
	for(int i=1;i<=n;i++)
	{
		if(fa[i]==0){
			dfs(i);
			cout<<max(dp[i][0],dp[i][1]);
			break;
		}
	}
 } 
2023/10/21 17:20
加载中...