首页 > 其他 > 详细

没有上司的舞会

时间:2019-07-24 18:15:54      阅读:90      评论:0      收藏:0      [点我收藏+]

题面

dp[i][0]=sum(max(dp[son][1],dp[son][0]));

dp[i][1]=sum(dp[son][0])+happy[i];

#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
using namespace std;

int n;
int root;
int value[10005];
int u,v;
int head[10005],cnt;
int f[10005][2];
int jl[10005];

struct note
{
	int next;
	int to;
}edge[10005];

int add(int u,int v)
{
	cnt++;
	edge[cnt].to=v;
	edge[cnt].next=head[u];
	head[u]=cnt;
	return 0;
}

int dp(int x)
{
	
	for(int i=head[x];i;i=edge[i].next)
	{
		//if(x==2)printf("1\n");
		int v=edge[i].to;
		//printf("%d %d %d %d\n",x,v,f[x][0],f[x][1]);
		dp(v);
		//printf("%d %d %d %d\n",x,v,f[v][0],f[v][1]);
		//printf("%d %d %d\n",x,f[x][0],f[x][1]);
		f[x][0]+=max(f[v][1],f[v][0]);
		f[x][1]+=f[v][0];
		//printf("%d %d %d\n",x,f[x][0],f[x][1]);
	}
	//printf("%d %d %d\n",x,f[x][0],f[x][1]);
	//if(x==2)printf("%d\n",f[3][0]);
	f[x][1]+=value[x];
	//if(x==2)printf("%d\n",f[3][0]);
	return 0;
}

int main() 
{
	scanf("%d",&n);
	
	for(int i=1;i<=n;i++)
	scanf("%d",&value[i]);
	
	for(int i=1;i<=n-1;i++)
	{
	    scanf("%d%d",&u,&v);
	    add(v,u);
	    jl[u]++;
	}
	
	for(int i=1;i<=n;i++)
	{
		if(jl[i]==0)
		{
			root=i;
			break;
		}
	}
	
	//printf("%d\n",f[3][0]);
	dp(root);
	//printf("%d\n",f[4][0]);
	printf("%d",max(f[root][0],f[root][1]));
	return 0;
}

  

没有上司的舞会

原文:https://www.cnblogs.com/ainiyuling/p/11239576.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!