codevs 1380 没有上司的舞会

变式题目:给定一棵树每个点有一个点权,求一个独立集使得点权和最大,树上的独立集指的是选取树上的点,使尽量多的点不直接相连

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 钻石 Diamond 
题目描述 Description

Ural大学有N个职员,编号为1~N。他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。每个职员有一个快乐指数。现在有个周年庆宴会,要求与会职员的快乐指数最大。但是,没有职员愿和直接上司一起与会。

输入描述 Input Description

第一行一个整数N。(1<=N<=6000)
接下来N行,第i+1行表示i号职员的快乐指数Ri。(-128<=Ri<=127)
接下来N-1行,每行输入一对整数L,K。表示K是L的直接上司。
最后一行输入0,0。

输出描述 Output Description

输出最大的快乐指数。

样例输入 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

数据范围及提示 Data Size & Hint

各个测试点1s

分类标签 Tags

动态规划 树型DP

 /*树形Dp:一般以节点作为状态划分的点。
对于当前的节点代表的人:
1.这个人去舞会,那么他的下属一定不去,状态转移到子节点
2.这个人不去舞会,但是他的下属也不一定会去,因为不一定是最优,就是在子节点去与不去间取最优
树形Dp一般从根节点开始记忆化搜索来实现。
*/
#include<iostream>
using namespace std;
#include<cstdio>
#define N 8000
struct Edge{
int v,last;
}edge[N];
bool flag[N];/*找根节点*/
int f[N][],val[N];/*f[i][1]代表当前节点去舞会的这棵子树上快乐最大值,f[i][0]代表当前节点不去舞会的这棵子树上快乐最大值,*/
int head[N]={},cnt=;
int n;
void add_edge(int u,int v)
{
++cnt;
edge[cnt].v=v;/*建立边表*/
edge[cnt].last=head[u];
head[u]=cnt;
}
void dp(int u)
{
f[u][]=;/*搜索的边界就是没有下属的人,就是f[u][1]=val[u]; f[u][0]=0;*/
f[u][]=val[u];
for(int l=head[u];l;l=edge[l].last)/*对于有下属的人,必须知道他的下属情况才能判断*/
{
int v=edge[l].v;
dp(v);/*搜索下属*/
f[u][]=max(f[u][],f[u][]+f[v][]);/*注意这是在for循环中当前点的f[v][0]会被加了多次,v不同*/
f[u][]=f[u][]+max(f[v][],f[v][]);/*当前节点不去,就判断他的某个子节点去还是不去最优*/
}
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;++i)
scanf("%d",&val[i]);
for(int i=;i<n;++i)
{
int u,v;
scanf("%d%d",&v,&u);
flag[v]=true;/*给有父节点的点标上标记*/
add_edge(u,v);
}
int u,v;
scanf("%d%d",&u,&v);
for(int i=;i<=n;++i)
if(!flag[i])/*找到根节点*/
{
dp(i);
printf("%d\n",max(f[i][],f[i][]));
break;
}
return ;
}

树形DP--codevs 1380 没有上司的舞会的更多相关文章

  1. codevs 1380 没有上司的舞会 - 树形动态规划

    题目描述 Description Ural大学有N个职员,编号为1~N.他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.每个职员有一个快乐指数.现在有个周年庆宴会 ...

  2. 【树形dp入门】没有上司的舞会 @洛谷P1352

    传送门 题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指 ...

  3. Codevs 1380 没有上司的舞会

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有从属关系,也就是说他们的关系就 ...

  4. wikioi 1380 没有上司的舞会 树形dp

    1380 没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他 ...

  5. 树形DP codevs 1814 最长链

    codevs 1814 最长链  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题目描述 Description 现给出一棵N个结点二叉树,问这棵二叉树中 ...

  6. 树形dp|无根树转有根树|2015年蓝桥杯生命之树

    2015年蓝桥杯第十题--生命之树(无根树dfs) ①暴力解法:枚举子集(选点) + dfs判断连通性(题目要求连通)满足上面两个条件下找出最大值权值和 ②dfs无根树转有根树,递归找最优 先学习无根 ...

  7. codevs 1380/HDU 1520 树形dp

    1380 没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 回到问题 题目描述 Description Ural大学有N个职员 ...

  8. Codevs1380没有上司的舞会_KEY

    没有上司的舞会 1380 没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description Ural大学有N个职员,编号为1~N.他们有从属关系,也就是说他们的关系 ...

  9. POJ_3342_Party at Hali-Bula_树形DP

    POJ_3342_Party at Hali-Bula_树形DP 题意:直接上司和本人不能同时参加,求最多参加人数,并回答是否唯一解. 分析:常规树形DP,需要再维护一下选/不选当前点取得最大值时是否 ...

随机推荐

  1. koa源码阅读[2]-koa-router

    koa源码阅读[2]-koa-router 第三篇,有关koa生态中比较重要的一个中间件:koa-router 第一篇:koa源码阅读-0第二篇:koa源码阅读-1-koa与koa-compose k ...

  2. phpmywind目录结构

    phpmywind目录结构了解 admin/ 后台管理目录 admin/editor/ 后台编辑器存放目录 admin/inc/ 后台公用文件引用目录 admin/plugin/ 后台插件存放目录 a ...

  3. perl6正则 3: 行开头与结尾与多行开头,多行结尾

    ^ $ 匹配一行的开头或结尾, 可以用 ^ 或 $. > so 'abcde' ~~ /e$/ True > so 'abcdef' ~~ /e$/ False > so 'abcd ...

  4. python并发编程之Queue线程、进程、协程通信(五)

    单线程.多线程之间.进程之间.协程之间很多时候需要协同完成工作,这个时候它们需要进行通讯.或者说为了解耦,普遍采用Queue,生产消费模式. 系列文章 python并发编程之threading线程(一 ...

  5. python基础===15条变量&方法命名的最佳实践

    不同的代码段采用不同的命名长度.通常来说,循环计数器(loop counters)采用1位的单字符来命名,循环判断变量(condition/loop variables)采用1个单词来命名,方法采用1 ...

  6. gdb安装

    1.卸载原有gdb  以root用户登录  1.1 查询原有gdb包名,执行命令: rpm -q gdb  1.2 卸载原有gdb包,假设gdb包名为gdb-7.0-0.4.16,执行命令:rpm - ...

  7. 在ubuntu 上安装sublime

    1.在sublime官网上下载sublime 2.将下载包解压到指定位置(自己决定) 3.进入解压文件里面 4.鼠标选中sublime_text,点击右键运行. 5.锁在启动器.

  8. 设计模式(一)工厂模式Factory(创建型)(转)

    原文链接:http://blog.csdn.net/hguisu/article/details/7505909 设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符 ...

  9. Java中Enum的使用

    http://www.cnblogs.com/happyPawpaw/archive/2013/04/09/3009553.html Enum有一个好处,可以使用EnumMap和EnumSet,而En ...

  10. ireport报表制作, 通过节点、产品类型来判断,当该节点审核通过之后,报表相对应的审核意见及签名 显示相对应的内容

    1.代码①  (与本内容相关的代码:7~36)           以下类似 $P{P_XXXX} :均为页面端的传入参数 select so.sale_order_no as sale_order_ ...