一眼二分。然后重点是树上贪心部分

长得像dp一样,设mn为子树内已炸点的最浅点,mx为子树内没有炸并且需要炸的最深点,然后转移直接从子树继承即可

然后是判断当前u点是否需要炸,当mx[u]+mn[u]<=mid,当前子树可以自己消化,所以mx[u]=-inf;否则,就需要在u炸一下

  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. const int N=300005;
  5. int n,m,h[N],cnt,d[N],sum,sm,mx[N],mn[N];
  6. struct qwe
  7. {
  8. int ne,to;
  9. }e[N<<1];
  10. int read()
  11. {
  12. int r=0,f=1;
  13. char p=getchar();
  14. while(p>'9'||p<'0')
  15. {
  16. if(p=='-')
  17. f=-1;
  18. p=getchar();
  19. }
  20. while(p>='0'&&p<='9')
  21. {
  22. r=r*10+p-48;
  23. p=getchar();
  24. }
  25. return r*f;
  26. }
  27. void add(int u,int v)
  28. {
  29. cnt++;
  30. e[cnt].ne=h[u];
  31. e[cnt].to=v;
  32. h[u]=cnt;
  33. }
  34. void dfs(int u,int fa,int w)
  35. {
  36. mx[u]=-1e9,mn[u]=1e9;
  37. for(int i=h[u];i;i=e[i].ne)
  38. if(e[i].to!=fa)
  39. {
  40. dfs(e[i].to,u,w);
  41. mx[u]=max(mx[u],mx[e[i].to]+1);
  42. mn[u]=min(mn[u],mn[e[i].to]+1);
  43. }
  44. if(d[u]&&mn[u]>w)
  45. mx[u]=max(mx[u],0);
  46. if(mx[u]+mn[u]<=w)
  47. mx[u]=-1e9;
  48. if(mx[u]==w)
  49. sm++,mx[u]=-1e9,mn[u]=0;
  50. }
  51. bool ok(int w)
  52. {
  53. sm=0;
  54. dfs(1,0,w);
  55. return sm+(mx[1]>=0)<=m;
  56. }
  57. int main()
  58. {
  59. n=read(),m=read();
  60. for(int i=1;i<=n;i++)
  61. d[i]=read(),sum+=d[i];
  62. for(int i=1;i<n;i++)
  63. {
  64. int x=read(),y=read();
  65. add(x,y),add(y,x);
  66. }
  67. if(sum<=m)
  68. {
  69. puts("0");
  70. return 0;
  71. }
  72. int l=0,r=n,ans=n;
  73. while(l<=r)
  74. {
  75. int mid=(l+r)>>1;
  76. if(ok(mid))
  77. r=mid-1,ans=mid;
  78. else
  79. l=mid+1;
  80. }
  81. printf("%d\n",ans);
  82. return 0;
  83. }

bzoj 2525: [Poi2011]Dynamite【二分+树上贪心】的更多相关文章

  1. bzoj 2525 [Poi2011]Dynamite 二分+树形dp

    [Poi2011]Dynamite Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 270  Solved: 138[Submit][Status][D ...

  2. BZOJ 2525 Poi2011 Dynamite 二分答案+树形贪心

    题目大意:给定一棵树,有一些点是关键点,要求选择不超过mm个点.使得全部关键点到近期的选择的点距离最大值最小 二分答案,问题转化为: 给定一棵树,有一些点是关键点,要求选择最少的点使得每一个关键点到选 ...

  3. Bzoj 2525 [Poi2011]Dynamite

    2525: [Poi2011]Dynamite Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 240  Solved: 120[Submit][Sta ...

  4. 【BZOJ2525】[Poi2011]Dynamite 二分+树形DP

    [BZOJ2525][Poi2011]Dynamite Description Byteotian Cave的结构是一棵N个节点的树,其中某些点上面已经安置了炸.药,现在需要点燃M个点上的引线引爆所有 ...

  5. 【BZOJ2525】[Poi2011]Dynamite(二分,树形dp)

    [BZOJ2525][Poi2011]Dynamite Description Byteotian Cave的结构是一棵N个节点的树,其中某些点上面已经安置了炸.药,现在需要点燃M个点上的引线引爆所有 ...

  6. bzoj 2217 [Poi2011]Lollipop 乱搞 贪心

    2217: [Poi2011]Lollipop Time Limit: 15 Sec  Memory Limit: 64 MBSec  Special JudgeSubmit: 383  Solved ...

  7. 【BZOJ2067】[Poi2004]SZN 二分+树上贪心

    [BZOJ2067][Poi2004]SZN Description String-Toys joint-stock 公司需要你帮他们解决一个问题. 他们想制造一个没有环的连通图模型. 每个图都是由一 ...

  8. 2067: [Poi2004]SZN——树上贪心+二分

    题目大意: 给一棵树.求用最少的链覆盖这棵树(链不能相交),在这个基础上求最长的链最短可以是多少. n<=10000 题解: 肯定先处理第一问: 答案:$\sum_(du[i]-1)/2+1$ ...

  9. 【BZOJ1816】[CQOI2010]扑克牌(二分,贪心)

    [BZOJ1816][CQOI2010]扑克牌(二分,贪心) 题面 BZOJ 题解 看了一眼这题,怎么这么眼熟?woc,原来\(xzy\)的题目是搬的这道啊... 行,反正我考的时候也切了,这数据范围 ...

随机推荐

  1. 前端学习之--CSS

    CSS 常用帮助文档 CSS:被用来同时控制多重网页的样式和布局.HTML页面中CSS样式的写法有3种: 1:标签中写入 <body style='margin o auto;'> 2:h ...

  2. 编译.net .net Core程序 代码,仅做备份

    //创建一个ProcessStartInfo对象 使用系统shell 指定命令和参数 设置标准输出 //编译.net core项目 var psi = new ProcessStartInfo(&qu ...

  3. dubbo-admin安装和使用

    更新下链接,不知道是不是这个项目合入Apache的缘故,链接都变成了https://github.com/apache/incubator-dubbo/ 按照常理,直接去 https://github ...

  4. IntelliJ IDEA 基本配置入门

    前言:今天下载安装IntelliJ IDEA.随手创建了一个项目,运行Build提示错误. 与大多数用于开发JAVA的IDE类似,不做不论什么配置.编译是不会成功的.因此我尝试对IDEA的配置进行了一 ...

  5. VB6 如何连接MYSQL数据库

    1 从官网下载MYSQL的ODBC,选择与自己操作系统对应的版本(前提是你安装了MYSQL) http://dev.mysql.com/downloads/connector/odbc/   2 安装 ...

  6. Win7 本地打印后台处理程序服务没有运 怎么办

    找到名为Print Spooler的服务,启动类型改为自动,服务状态改为启动即可.

  7. hdu 5303 Delicious Apples

    这道题贪心 背包 假设在走半圆之内能够装满,那么一定优于绕一圈回到起点.所以我们从中点将这个分开,那么对于每一个区间由于苹果数非常少,所以能够利用pos[x]数组记录每一个苹果所在的苹果树位置,然后将 ...

  8. Android反复闹钟(每天)的实现

    MainActivity例如以下: package cc.cc; import java.util.Calendar; import java.util.Locale; import android. ...

  9. 分享:APK高级保护方法解析(三)

    刷朋友圈.玩游戏.看新闻,智能手机正在以我们无法想象的速度飞快发展,可是随之而来的安全问题也越来越引人关注,APP二次打包.反编译.盗版的现象屡见不鲜.因此须要对APK进行加固保护. 眼下市面上常见的 ...

  10. 【剑指offer】数组中仅仅出现一次的数字(1)

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/27649027 题目描写叙述: 一个整型数组里除了两个数字之外.其它的数字都出现了两次. 请 ...