题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520

思路:树形DP的入门题

定义dp[root][1]表示以root为根节点的子树,且root本身参加party的最优值,那么dp[root][1]+=Σdp[son][0]+happy[root];

dp[root][0]表示以root为跟节点且root本身没有参加的最优值,那么dp[root][0]+=max(dp[son][0],dp[son][1]);

如果不理解,可以参考我对hdu1054的解释。

代码如下:

 #include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAX 6010
int dp[MAX][];
int happy[MAX];
class node
{
public:
int to;
int next;
};
node edge[*MAX];
int head[MAX];
int vis[MAX];
int n;
int tol;
void init()
{
memset(vis,,sizeof(vis));
memset(head,-,sizeof(head));
memset(dp,,sizeof(dp));
tol=;
}
void Build_Tree(int u,int v)
{
edge[tol].to=v;
edge[tol].next=head[u];
head[u]=tol++;
}
void dfs(int root)
{
vis[root]=;
int hy=happy[root];
for(int i=head[root];i!=-;i=edge[i].next)
{
if(vis[edge[i].to]) continue;
int son=edge[i].to;
dfs(son); dp[root][]+=dp[son][];
dp[root][]+=max(dp[son][],dp[son][]);
}
dp[root][]+=hy;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
init();
for(int i=;i<=n;i++)
scanf("%d",&happy[i]);
int u,v; while(scanf("%d%d",&v,&u)!=EOF&&v&&u)
{
Build_Tree(u,v);
Build_Tree(v,u);
}
dfs();
cout<<max(dp[][],dp[][])<<endl;
}
return ;
}

hdu1520 Anniversary party 简单树形DP的更多相关文章

  1. poj 2342 Anniversary party 简单树形dp

    Anniversary party Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3862   Accepted: 2171 ...

  2. HDU-1520 Anniversary party(树形DP)

    题目大意:一棵树,每个节点都带权.从中取出一些节点,并且子节点不能与父节点同时取,求能取得的最大值. 题目分析:定义状态dp(u,0/1)表示u点不取/取.则状态转移方程为: dp(u,1)=sum( ...

  3. poj2342 Anniversary party (树形dp)

    poj2342 Anniversary party (树形dp) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9128   ...

  4. HDU1520:Anniversary party(树形dp第一发)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1520 一个公司去参加宴会,要求去的人不能有直接领导关系,给出每一个人的欢乐值,和L K代表K是L的直接领导 ...

  5. hdu 1520Anniversary party(简单树形dp)

    Anniversary party Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  6. hdu4705 Y 简单树形DP 2013多校训练第十场 J题

    题意:求一棵树中不在一条链中的三个点的对数. 转化一下,用总对数减去在一条链上的三点对数即可. 考虑经过根节点,然后可能是不同的子树中各选一个:或者是子树中选一个,然后当前节点为根的子树以外的节点选一 ...

  7. Anniversary party (树形DP)

    There is going to be a party to celebrate the 80-th Anniversary of the Ural State University. The Un ...

  8. [10.27_P2] 统计损失 (简单树形DP)

    树形DP 简单题 Description 给定一棵树,每个节点有一个值.对于一条路径,它的值为路径上所有点的值的乘积.求出树上所有路径的值的和. 注意:单个点也算一条路径. Input 第 1 行一个 ...

  9. hdu 1054 Strategic Game (简单树形DP)

    Strategic Game Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

随机推荐

  1. Redis数据迁移方案

    场景 Redis实例A ---> Redis实例B,整库全量迁移 方案一: mac环境 brew install npm npm install redis-dump -g 针对RedisA: ...

  2. js 操作 cookie

    js 操作 cookie 的方法如下: //设置cookie function setCookie(cname, cvalue, exdays) { var d = new Date(); d.set ...

  3. 老李推荐:第6章1节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览 2

    事件要到那里去? 每个事件源处理类都维护着一个自己的事件队列, 在Monkey中叫做CommandQueue,里面装的是每个具体的MonkeyEvent事件.当来自网络的字串命令被翻译成对应的Monk ...

  4. 手机自动化测试:appium问题解决

    手机自动化测试:appium问题解决   Appium遇到问题: 问题一:问题org.openqa.selenium.remote.UnreachableBrowserException: Could ...

  5. EDP转换IC NCS8801S:RGB/LVDS转EDP芯片

    RGB/LVDS-to-eDP Converter1 Features    Embedded-DisplayPort (eDP) Output    2-lane/4-lane eDP @ 1.62 ...

  6. Python JavaScript概述

    一.如何编写? 1.JavaScript代码存在形式 <!DOCTYPE html> <html> <head> <meta http-equiv=" ...

  7. Oracle 数据导入导出操作 (转)

    Oracle数据导入导出imp/exp 功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份. 大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢 ...

  8. 关于mysql的初步学习

    1.在windows上使用CMD链接数据库 这是原始用户表 users 这是通过 语句插入而来的 user表和user2表结构相同 user2 的数据 通过如下SQL语句从users表赋值过来: in ...

  9. idea2015的使用心得

    今天打开myeclipse感觉里面全是project,也懒着换地方了,因为这些代码还要时常看,索性安装了idea试试水,感觉还不错,用起来并不比myeclipse差,跟webstorm差不多,他俩就是 ...

  10. 第三章 Struts2配置详解

    3.1 Struts2执行过程    1.获取Struts2资源    2.在应用程序中导入Struts2的类库    3.在web.xml中配置StrutsPrepareAndExecuteFilt ...