【CodeVS1380】【Tyvj1052】没有上司的舞会
来源:互联网 发布:淘宝下单微信返现 编辑:程序博客网 时间:2024/04/29 19:11
【Description】
Ural大学有N个职员,编号为1~N。他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。每个职员有一个快乐指数。现在有个周年庆宴会,要求与会职员的快乐指数最大。但是,没有职员愿和直接上司一起与会。
【Input】
第一行一个整数N。(1<=N<=6000)
接下来N行,第i+1行表示i号职员的快乐指数Ri。(-128<=Ri<=127)
接下来N-1行,每行输入一对整数L,K。表示K是L的直接上司。
最后一行输入0,0。
【Output】
输出最大的快乐指数。
【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
【Solution】
本题是简单的树形DP,对于每个节点只有选和不选两种可能。
参考代码如下:
var n,i,l,k,root:longint; r:array[0..7000] of longint; f:array[0..7000,0..1] of longint; father:array[0..7000] of longint;function max(x,y:longint):longint; begin if x>y then exit(x) else exit(y); end;procedure search(x:longint); //树形DP var i:longint; flag:boolean; begin flag:=false; for i:=1 to n do begin if father[i]=x then begin flag:=true; search(i); f[x,0]:=f[x,0]+max(f[i,1],f[i,0]); f[x,1]:=f[x,1]+f[i,0]; end; end; if not flag then begin f[x,0]:=0; f[x,1]:=r[x]; end else f[x,1]:=f[x,1]+r[x]; end;begin readln(n); for i:=1 to n do readln(r[i]); for i:=1 to n-1 do begin readln(l,k); father[l]:=k; end; readln(l,k); for i:=1 to n do if father[i]=0 then begin root:=i; break; end; fillchar(f,sizeof(f),0); search(root); writeln(max(f[root,0],f[root,1]));end.
0 0
- 【CodeVS1380】【Tyvj1052】没有上司的舞会
- [tyvj1052]没有上司的舞会
- Codevs1380 没有上司的舞会
- codevs1380 没有上司的舞会
- codevs1380没有上司的舞会
- codevs1380 没有上司的舞会
- 【tyvj1052】【树状dp】没有上司的舞会
- 树形DP Tyvj1052 没有上司的舞会
- 洛谷1352 CODEVS1380 没有上司的舞会
- 没有上司的舞会 Codevs1380&POj2342&Hdu1520
- codevs1380 没有上司的舞会 树上dp
- 【洛谷 P1352】【codevs1380】没有上司的舞会
- Codevs1380没有上司的舞会_KEY
- POJ 2342 Anniversiry Party(TYVJ1052 没有上司的舞会)
- 【Codevs1380】没有上司的舞会【树上最大独立集】【TreeDP】
- 【codevs1380】没有上司的舞会 树形dp经典题目
- CodeVS1380 没有上司的舞会 解题报告【树形DP】
- 没有上司的舞会
- python 设置linux环境变量
- Java中加载图片方法
- 内存模型(1)
- Java中的Atomic包使用指南
- swift - The Facade Pattern
- 【CodeVS1380】【Tyvj1052】没有上司的舞会
- 非ARC下的内存释放
- 线程范围内的共享和作用
- 【并查集题目总结】
- cerc2014 Vocabulary
- 创建线程池
- lesson2-java虚拟机之jvm结构
- 程序员的年龄天花板
- Linux下Sed的用法详情