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 ...
随机推荐
- LeetCode:最接近的三数之和【16】
LeetCode:最接近的三数之和[16] 题目描述 给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这 ...
- 20145239 杜文超《Java程序设计》课程总结
<每周读书笔记链接汇总> 第一周读书笔记:http://www.cnblogs.com/dwc929210354/p/5247666.html 第二周读书笔记:http://www.cnb ...
- 在ubuntu怎样修改默认的编码格式
ubuntu修改系统默认编码的方法是: 1. 参考 /usr/share/i18n/SUPPORTED 编辑/var/lib/locales/supported.d/* gedit /var/lib/ ...
- 多线程与Java的JMM内存模型
共享内存模型指的就是Java内存模型(简称JMM),JMM决定一个线程对共享变量的写入时,能对另一个线程可见.从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存( ...
- HTML布局之左右结构,左边固定右边跟据父元素自适应
HTML布局之左右结构,左边固定右边跟据父元素自适应,兼容IE6+.Firefox.Chrome.Opera.Safari,这里是用表单写的一个demo,其实就在主体布局中也是可以的,比如像后台一些管 ...
- tensorflow 线性回归 iris
线性拟合
- jvm file.encoding 属性引起的storm/hbase乱码
1. 问题 今天为storm程序添加了一个计算bolt,上线后正常,结果发现之前的另一个bolt在将中文插入到hbase中后查询出来乱码.其中字符串是以UTF-8编码的url加密串,然后我使用的URL ...
- 关于ng-class中添加多个样式类的解决方案
想要达到ng-class的效果,有两种写法 1.class=“{{class}} class1 class2” 2.ng-class="{true: 'active', false: 'in ...
- 搭建基于Nagios的监控系统——之监控远程Linux服务器
上一篇介绍了如何安装Nagios Core,这一篇跟大家分享一下如何将一台远程的Linux服务器加入纳入监控范围. 第一部分:在远程Linux上安装Nagios Plugins和NRPE 第一步: ...
- std::ostringstream 转std::string
http://www.cplusplus.com/reference/sstream/ostringstream/ https://en.cppreference.com/w/cpp/io/basic ...