对于每个点,处理出走完其子树所需要的时间和其子树完全下载完软件的时间

易证,对于每个点的所有子节点,一定优先选择差值大的来给后面的时间

树规+贪心。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #include<cmath>
  5. #include<algorithm>
  6. #include<queue>
  7. #define N 500005
  8. using namespace std;
  9. int e=1,head[N],fa[N],n;
  10. int a[N];
  11. struct edge{
  12. int u,v,next;
  13. }ed[2*N];
  14. void add(int u,int v){
  15. ed[e].u=u; ed[e].v=v;
  16. ed[e].next=head[u];
  17. head[u]=e++;
  18. }
  19. struct data{
  20. int f,g,del;//f为出该子树用的时间,g为该子树装完软件的时间,del为差值;
  21. bool operator < (const data &a) const{
  22. return a.del>del;
  23. }
  24. }da[N];
  25. int q[N],top=0;
  26. bool cmp(int x,int y)
  27. {return da[x].del<da[y].del;}
  28. void dfs(int x){
  29. int bottom=top;
  30. for(int i=head[x];i;i=ed[i].next){
  31. int v=ed[i].v;
  32. if(v==fa[x]) continue;
  33. fa[v]=x;
  34. dfs(v);
  35. q[++top]=v;
  36. }
  37. if(x!=1){
  38. da[x].g=1+a[x];
  39. da[x].f++;
  40. }
  41. sort(q+bottom+1,q+top+1,cmp);
  42. while(top>bottom){
  43. da[x].g=max(da[x].g,da[x].f+da[q[top]].g);
  44. da[x].f+=da[q[top]].f;
  45. top--;
  46. }
  47. if(x==1){da[x].g=max(da[x].g,da[x].f+a[x]);}
  48. if(x!=1) da[x].f++;
  49. da[x].del=da[x].g-da[x].f;
  50. }
  51. int main()
  52. {
  53. scanf("%d",&n);
  54. for(int i=1;i<=n;i++)
  55. scanf("%d",&a[i]);
  56. int u,v;
  57. for(int i=1;i<n;i++){
  58. scanf("%d%d",&u,&v);
  59. add(u,v); add(v,u);
  60. }
  61. dfs(1);
  62. printf("%d\n",da[1].g);
  63. return 0;
  64. }

[Poi2014]FarmCraft 树状dp的更多相关文章

  1. 树状DP (poj 2342)

    题目:Anniversary party 题意:给出N各节点的快乐指数,以及父子关系,求最大快乐指数和(没人职员愿意跟直接上司一起玩): 思路:从底向上的树状DP: 第一种情况:第i个员工不参与,F[ ...

  2. poj3659树状DP

    Cell Phone Network Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6273   Accepted: 225 ...

  3. hdu 1561 The more, The Better_树状dp

    题目链接 题意:给你一棵树,各个节点都有价值(除根节点),从根节点出发,选择m个节点,问最多的价值是多小. 思路:很明显是树状dp,遍历树时背包最优价值,dp[i][k]=max{dp[i][r]+d ...

  4. poj 2342 Anniversary party_经典树状dp

    题意:Ural大学有n个职员,1~N编号,他们有从属关系,就是说他们关系就像一棵树,父节点就是子节点的直接上司,每个职员有一个快乐指数,现在要开会,职员和职员的直接上司不能同时开会,问怎才能使开会的快 ...

  5. 树状DP HDU1520 Anniversary party

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意:职员之间有上下级关系,每个职员有自己的happy值,越高在派对上就越能炒热气氛.但是必须是 ...

  6. [Codeforces743D][luogu CF743D]Chloe and pleasant prizes[树状DP入门][毒瘤数据]

    这个题的数据真的很毒瘤,身为一个交了8遍的蒟蒻的呐喊(嘤嘤嘤) 个人认为作为一个树状DP的入门题十分合适,同时建议做完这个题之后再去做一下这个题 选课 同时在这里挂一个选取节点型树形DP的状态转移方程 ...

  7. HDU 4714 Tree2cycle(树状DP)(2013 ACM/ICPC Asia Regional Online ―― Warmup)

    Description A tree with N nodes and N-1 edges is given. To connect or disconnect one edge, we need 1 ...

  8. poj2486--Apple Tree(树状dp)

    Apple Tree Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7789   Accepted: 2606 Descri ...

  9. 洛谷P2015 二叉苹果树(树状dp)

    题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的结点的编号来 ...

随机推荐

  1. java程序的内存分配(二)

    前言 您是否是动态分配的 C/C++ 对象忠实且幸运的用户?您是否在模块间的往返通信中频繁地使用了"自动化"?您的程序是否因堆分配而运行起来很慢?不仅仅您遇到这样的问题.几乎所有项 ...

  2. ORACLE分页SQL语句(转载)

    1.根据ROWID来分select * from t_xiaoxi where rowid in(select rid from (select rownum rn,rid from(select r ...

  3. C语言关键字register、extern、static、一些总结,及项目中使用的心得

    首先介绍两个概念: 一.变量的生存周期: 变量从建立到撤销的时间段成变量的生存周期.静态变量,从变量产生到整个程序执行结束.当函数使用变量结束后,变量的存储空间依然存在,变量的值也会随着函数的对其的使 ...

  4. WSL与Windows交互实践

    1. WSL是什么 2. WSL新特性 3. WSL管理配置 4. WSL交互 5. 解决方案  * 5.1 使用别名  * 5.2 多复制一份  * 5.3 重定向  * 5.4 symlink 6 ...

  5. Collections模块下的Counter

    class Counter(dict) 这个类是dict的子类,对哈希类型的项进行计数,元素被存储为字典的键,他们的计数将作为字典的键值. 主要介绍两个方法: 1.初始化方法:__init__(*ar ...

  6. Hibernate中配置文件的学习

    首先我们看一下hibernate的主配置文件 <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Conf ...

  7. stm8开发环境

    网上大致有两种环境: 1.stvp+stvd 也就是st自家的sttoolsetpack包 stvd的界面有点古板,有点像vc++6.0,具体使用感觉怎样我也不知道,我没有使用这个环境. stvp这个 ...

  8. MySQL的日志(二):事务日志

    本文目录:1.redo log 1.1 redo log和二进制日志的区别 1.2 redo log的基本概念 1.3 日志块(log block) 1.4 log group和redo log fi ...

  9. 你需要知道的Android拍照适配方案

    拍照功能实现 Android 程序上实现拍照功能的方式分为两种:第一种是利用相机的 API 来自定义相机,第二种是利用 Intent 调用系统指定的相机拍照.下面讲的内容都是针对第二种实现方式的适配. ...

  10. 深入理解css3中的线性渐变

    css3中的线性渐变 线性渐变公式: background-image: linear-gradient( [ <angle> | <side-or-corner> ]?, & ...