博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[CODEVS 1380]没有上司的舞会
阅读量:5133 次
发布时间:2019-06-13

本文共 1223 字,大约阅读时间需要 4 分钟。

【问题描述】

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

【输入】

  第一行一个整数N。(1<=N<=6000)

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

【输出】

  输出最大的快乐指数。

【算法分析】

  类似于0-1背包的树形DP基础题,状态转移详见代码。

【程序代码】

1 var a,fa:array[1..6000] of longint; 2     f:array[1..6000,0..1] of longint; 3     s:array[1..6000] of longint; 4     i,j,k,n,m,ans,u,v:longint; 5 function max(x,y:longint):longint; 6 begin 7     if x>y then exit(x) else exit(y); 8 end; 9 procedure dp(x:longint);10 var i:longint;11 begin12     if s[x]=0 then begin f[x,0]:=0; f[x,1]:=a[x]; exit; end;13     for i:=1 to n do if fa[i]=x then14     begin15         dp(i);16         inc(f[x,0],max(f[i,1],f[i,0]));17         inc(f[x,1],f[i,0]);18     end;19 end;20 begin21     readln(n);22     for i:=1 to n do readln(a[i]);23     for i:=1 to n-1 do24     begin25         readln(u,v);26         fa[u]:=v;27         inc(s[v]);28     end;29     readln(u,v);30     for i:=1 to n do if fa[i]=0 then k:=i;31     for i:=1 to n do f[i,1]:=a[i];32     dp(k);33     writeln(max(f[k,1],f[k,0]));34 end.

 声明:本博文为博主原创博文,未经允许请勿转载。

转载于:https://www.cnblogs.com/Double680/p/5192193.html

你可能感兴趣的文章
存储引擎
查看>>
有关Linux下的一些配置
查看>>
解析网页(KMP算法实现部分)
查看>>
Qt Creator 4.9 发布
查看>>
十四、View Port 2.0
查看>>
爬虫神器xpath的用法(三)
查看>>
360企业版使用感受
查看>>
Git Diff 魔法
查看>>
foundation 数组NSArray学习
查看>>
homework-06
查看>>
POJ 2584 T-Shirt Gumbo 构图 最大流
查看>>
HDU 1712 ACboy needs your help(简单分组DP)
查看>>
PHP学习随笔(3):数组
查看>>
Java知多少(9) import及Java类的搜索路径
查看>>
三大主流软件负载均衡器对比(LVS VS Nginx VS Haproxy)
查看>>
SQL Server 2008 R2 中英文 开发版/企业版/标准版 链接地址
查看>>
android: ListView设置emptyView 误区
查看>>
android framework-下载Android系统源代码
查看>>
php array_merge和“+”的区别和使用《细说php2》
查看>>
Spark Streaming ReceiverTracker架构设计
查看>>