hdu1520 Anniversary party
Anniversary party
题意:你要举行一个晚会,所有人的关系可以构成一棵树,要求上下级关系的人不能同时出现,每一个人都有一个rating值,要求使整个晚会的rating值最大。
/*
解题思路:树形dp,随意从一个点开始扩展,把周围所有节点的dp都解决出来,然后加上去即可。
用dp[i][0]表示不选中i号,周围的都可以选的最大值,dp[i][1]表示选中i号,那么周围都不能选的最大值。
则
dp[i][0]+=(dp[j][1],dp[j][0])
dp[i][1]+=dp[j][0]
i和j相邻,并且在求i的时候从j扩展的都已经求出来。
*/
#include<cstdio>
#include<iostream>
#include<vector>
#include<string.h>
using namespace std;
#define Max(a,b) a>b?a:b
vector<int> q[];
int visit[],rating[],dp[][];
void dfs(int r)
{
//printf("r=%d\n",r);
int i,v;
visit[r]=;
if(q[r].size()==)
{
dp[r][]=rating[r];
dp[r][]=;
}
int dp1=,dp0=;
for(i=;i<q[r].size();i++)
{
v=q[r][i];
if(!visit[v])
{
//printf("v=%d ",v);
dfs(v);
}
dp1+=dp[v][];//若选了此节点,则孩子都不能选
dp0+=Max(dp[v][],dp[v][]);//若不选此节点,则孩子可选可不选
}
dp[r][]=dp1+rating[r];
dp[r][]=dp0;
}
int main()
{
int n,root;
int i,j,k;
while(~scanf("%d",&n))
{
for(i=;i<=n;i++)
q[i].clear();
for(i=;i<=n;i++)
scanf("%d",&rating[i]);
memset(visit,,sizeof(visit));
int c,f;
root=;
while(scanf("%d%d",&c,&f),c||f)
{
if(c==root)
root=f;//新学习的一个寻根的小技巧
q[f].push_back(c);
}
dfs(root);
printf("%d\n",Max(dp[root][],dp[root][]));
}
return ;
}
hdu1520 Anniversary party的更多相关文章
- HDU1520 Anniversary party 树形DP基础
There is going to be a party to celebrate the 80-th Anniversary of the Ural State University. The Un ...
- HDU1520 Anniversary party —— 树形DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 Anniversary party Time Limit: 2000/1000 MS (Java ...
- hdu1520 Anniversary party (树形dp)
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1520题意:上司和直系下属不能同时参加party,求party的最大活跃值.输入: 输入n个 ...
- HDU-1520 Anniversary party(树形DP)
题目大意:一棵树,每个节点都带权.从中取出一些节点,并且子节点不能与父节点同时取,求能取得的最大值. 题目分析:定义状态dp(u,0/1)表示u点不取/取.则状态转移方程为: dp(u,1)=sum( ...
- hdu1520 Anniversary party 简单树形DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 思路:树形DP的入门题 定义dp[root][1]表示以root为根节点的子树,且root本身参 ...
- 树状DP HDU1520 Anniversary party
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意:职员之间有上下级关系,每个职员有自己的happy值,越高在派对上就越能炒热气氛.但是必须是 ...
- 【树形dp小练】HDU1520 HDU2196 HDU1561 HDU3534
[树形dp]就是在树上做的一些dp之类的递推,由于一般须要递归处理.因此平庸情况的处理可能须要理清思路.昨晚開始切了4题,作为入门训练.题目都很easy.可是似乎做起来都还口以- hdu1520 An ...
- hdu1520 树形dp Anniversary party
A - Anniversary party Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I6 ...
- Anniversary party(hdu1520)
Anniversary party Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
随机推荐
- linux 下 cat
[root@localhost Data]# cat << end > iptable> 3> 4> 5> > 6> end[root@local ...
- Android Wifi简单的梳理【转】
本文转载自:http://blog.csdn.net/gabbzang/article/details/10005411 代表一个已经配置过的网络.包含网络ID(networkId).该网络ID代表的 ...
- 批量导入oracle 的sql脚本
以下为脚本样例:execute.sql,在PL/sql的command窗口或sqlplus中执行:@目录/execute.sql (以下“目录”需要替换为实际sql所在目录) --执行前需要在目录下新 ...
- <密码学入门>关于RSA算法的加密解密及代码实现
RSA算法 是一种公钥加密算法,RSA算法相比别的算法思路非常清晰,但是想要破解的难度非常大.RSA算法基于一个非常简单的数论事实:两个素数相乘得到一个大数很容易,但是由一个大数分解为两个素数相乘却非 ...
- java中判断字符串是否相等有两种方法:
1.用“==”运算符,该运算符表示指向字符串的引用是否相同,比如: String a="abc";String b="abc",那么a==b将返回true.这是 ...
- mooc_java 集合框架上 学生所选课程
用一个集合Set存放学生所选课程接口不能实例化,所以用其实现类进行实例化 set接口不能实例化,通过HashSet这个实现类来进行实例化,需要导入包this.courses=new HashSet() ...
- python注释行与段落
注释行:# 注释段:‘’‘ ’‘’
- Cocos2d-x中定时器的使用
CCTimer:轻量级的计时器 CCTimer (void) ccTime getInterval (void) void setInterval (ccTime fInterval) bool ...
- LoadRunner中的函数
函数是LoadRunner提供给性能测试工程师的利器,有了它,性能测试工程师可以对脚本进行更为自由的开发,更适应实际测试的需求,进一步扩展脚本的功能. LoadRunner函数的格式: 返回值 函数 ...
- listen 62
The Hangover I'm never drinking again. And this time I mean it! Anyone who's suffered through a bad ...