Anniversary party (树形DP)
There is going to be a party to celebrate the 80-th Anniversary of the Ural State University. The University has a hierarchical structure of employees. It means that the supervisor relation forms a tree rooted at the rector V. E. Tretyakov. In order to make the party funny for every one, the rector does not want both an employee and his or her immediate supervisor to be present. The personnel office has evaluated conviviality of each employee, so everyone has some number (rating) attached to him or her. Your task is to make a list of guests with the maximal possible sum of guests' conviviality ratings.
Input
Employees are numbered from 1 to N. A first line of input contains a number N. 1 <= N <= 6 000. Each of the subsequent N lines contains the conviviality rating of the corresponding employee. Conviviality rating is an integer number in a range from -128 to 127. After that go T lines that describe a supervisor relation tree. Each line of the tree specification has the form: 
L K 
It means that the K-th employee is an immediate supervisor of the L-th employee. Input is ended with the line 
0 0
Output
Output should contain the maximal sum of guests' ratings.
Sample Input
7
1
1
1
1
1
1
1
1 3
2 3
6 4
7 4
4 5
3 5
0 0
Sample Output
5
题解:这个题意是要举行晚会,每个人邀请了1——N个人,然后,每个人都有一个愉快值,但是如果每个人如果他的直接上司在他就会不开心,既然有等级关系,我们可以建立一棵树,然后对这棵树进行比较,通过dfs遍历,我们可以把在当前深度和他的上司深度进行比较,择优选择较大,这是一个dp的过程并且是在树上的操作,故可以用树形dp来解。,然后存图问题需要考虑,
下面给出两种代码,一种过poj,过不了hdu,另一种可过hdu
代码:
过POJ:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
int pre[6005],vis[6005],n,dp[6005][2],s[6005];
void dfs(int a)
{
    vis[a]=1;
    for(int i=1; i<=n; i++)
    {
        if(vis[i]==0&&pre[i]==a)
        {
            dfs(i);
            dp[a][0]+=max(dp[i][0],dp[i][1]);
            dp[a][1]+=dp[i][0];
        }
    }
    return;
}
int main()
{
        while(scanf("%d",&n)!=EOF)
        {
        int a,b;
        memset(vis,0,sizeof(vis));
        memset(s,0,sizeof(s));
        for(int t=1; t<=n; t++)
        {
            scanf("%d",&dp[t][1]);
            dp[t][0]=0;
        }
        while(scanf("%d%d",&a,&b))
        {
        	if(a==0||b==0)//注意是||,不然会TLE
        	break;
            pre[a]=b;
            s[a]=1;
        }
        for(int t=1; t<=n; t++)
            if(!s[t])
			{
			a=t;
			}
        dfs(a);
        printf("%d\n",max(dp[a][0],dp[a][1]));
        }
    return 0;
}
可过HDU
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
vector<int>v[6005];
int pre[6005];
int s[6005];
int dp[6005][2];
void dfs(int root)
{
    int len=v[root].size();
    dp[root][1]=s[root];
    for(int i=0;i<len;i++)
       dfs(v[root][i]);
    for(int i=0;i<len;i++)
    {
        dp[root][0]+=max(dp[v[root][i]][1],dp[v[root][i]][0]);
        dp[root][1]+=dp[v[root][i]][0];
    }
}
int main()
{
    int n;
    int a,b;
    while(scanf("%d",&n)!=EOF)
    {
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&s[i]);
            v[i].clear();
            pre[i]=-1;//对树根标记
            dp[i][0]=dp[i][1]=0;
        }
        while(scanf("%d%d",&a,&b))
        {
            if(a==0&&b==0)break;
            pre[a]=b;
            v[b].push_back(a);
        }
        a=1;
        while(pre[a]!=-1)
		a=pre[a];//找树根
        dfs(a);
        printf("%d\n",max(dp[a][1],dp[a][0]));
    }
    return 0;
}												
											Anniversary party (树形DP)的更多相关文章
- poj 2324 Anniversary party(树形DP)
		
/*poj 2324 Anniversary party(树形DP) ---用dp[i][1]表示以i为根的子树节点i要去的最大欢乐值,用dp[i][0]表示以i为根节点的子树i不去时的最大欢乐值, ...
 - [poj2342]Anniversary party_树形dp
		
Anniversary party poj-2342 题目大意:没有上司的舞会原题. 注释:n<=6000,-127<=val<=128. 想法:其实就是最大点独立集.我们介绍树形d ...
 - POJ 2342 - Anniversary party - [树形DP]
		
题目链接:http://poj.org/problem?id=2342 Description There is going to be a party to celebrate the 80-th ...
 - hdu  Anniversary party   树形DP,点带有值。求MAX
		
Anniversary party Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
 - POJ 2342  &&HDU 1520  Anniversary party  树形DP 水题
		
一个公司的职员是分级制度的,所有员工刚好是一个树形结构,现在公司要举办一个聚会,邀请部分职员来参加. 要求: 1.为了聚会有趣,若邀请了一个职员,则该职员的直接上级(即父节点)和直接下级(即儿子节点) ...
 - HDU 1520 Anniversary party [树形DP]
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题目大意:给出n个带权点,他们的关系可以构成一棵树,问从中选出若干个不相邻的点可能得到的最大值为 ...
 - POJ Anniversary party 树形DP
		
/* 树形dp: 给一颗树,要求一组节点,节点之间没有父子关系,并且使得所有的节点的权值和最大 对于每一个节点,我们有两种状态 dp[i][0]表示不选择节点i,以节点i为根的子树所能形成的节点集所能 ...
 - [poj2342]Anniversary party树形dp入门
		
题意:选出不含直接上下司关系的最大价值. 解题关键:树形dp入门题,注意怎么找出根节点,运用了并查集的思想. 转移方程:dp[i][1]+=dp[j][0];/i是j的子树 dp[i][0]+=max ...
 - Anniversary party_树形DP
		
Description There is going to be a party to celebrate the 80-th Anniversary of the Ural State Univer ...
 - HDU1520 Anniversary party 树形DP基础
		
There is going to be a party to celebrate the 80-th Anniversary of the Ural State University. The Un ...
 
随机推荐
- CH#24C 逃不掉的路 和 HDU3686 Traffic Real Time Query System
			
逃不掉的路 CH Round #24 - 三体杯 Round #1 题目描述 现代社会,路是必不可少的.任意两个城镇都有路相连,而且往往不止一条.但有些路连年被各种XXOO,走着很不爽.按理说条条大路 ...
 - BZOJ2563阿狸和桃子的游戏
			
2563: 阿狸和桃子的游戏 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 952 Solved: 682[Submit][Status][Discu ...
 - 2017.10.1北京清北综合强化班DAY1
			
a[问题描述]你是能看到第一题的 friends 呢.——hja何大爷对字符串十分有研究,于是天天出字符串题虐杀 zhx. 何大爷今天为字符串定义了新的权值计算方法.一个字符串 由小写字母组成,字符串 ...
 - 汇编题目:按A键,当松开的时显示字母A
			
安装一个新的int9中断例程,功能:在DOS下,按下“A”键后,除非不再松开,如果松开,就显示满屏的“A”:其他的按键照常处理.提示:按下一个键时产生的扫描码称为通码,松开一个键时产生的扫描码称为断码 ...
 - Oracle 12c 多租户配置和修改 CDB 和 PDB 参数
			
1. 配置CDB 实例参数,影响CDB与所有 PDB为CDB配置例程参数相对于对于非CDB的数据库是变化不太.ALTER SYSTEM命令用于设置初始化参数,与使用ALTER DATABASE命令修改 ...
 - bzoj 2044 三维导弹拦截——DAG最小路径覆盖(二分图)
			
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2044 还以为是CDQ.发现自己不会三维以上的…… 第一问可以n^2.然后是求最长不下降子序列 ...
 - BluetoothFindRadioClose 函数
			
BOOL BluetoothFindRadioClose( HBLUETOOTH_RADIO_FIND hFind );关闭与查找蓝牙无线电相关的枚举句柄.参数: hFind Enumeration ...
 - UGUI解决嵌套使用多个ScrollRect时的Drag拖动冲突问题
			
很简单,直接看代码: using UnityEngine.UI; using UnityEngine.EventSystems; using UnityEngine; /// <summary& ...
 - Learning Python 001 第一个程序
			
Python 第一个程序 我使用的开发工具是PyCharm软件.我们使用的是Python3.5 for windows . 如果你还没有安装PyCharm软件 和 Python3.5,请到这里来看如果 ...
 - 杭电acm 1098题
			
Problem Description Ignatius is poor at math,he falls across a puzzle problem,so he has no choice bu ...