题目大意:一棵有n个节点的有根树,1为根节点,边带权,表示删掉这条边的代价。现在要删掉一些边,使叶子节点不能到达根节点。但是,每次删除的边的代价不能超过limit,删掉的边的总代价不能超过m,求最小的limit的可能取值。

题目分析:二分枚举limit,定义状态dp(u)表示将u与它管辖的叶子节点失去联系所需要的总代价,则:

dp(u)+=min(dp(son),e[i].w),e[i].w<=limit;

dp(u)+=dp(son)  e[i].w>limit;

代码如下:

  1. # include<iostream>
  2. # include<cstdio>
  3. # include<cstring>
  4. # include<vector>
  5. # include<queue>
  6. # include<list>
  7. # include<set>
  8. # include<map>
  9. # include<string>
  10. # include<cmath>
  11. # include<cstdlib>
  12. # include<algorithm>
  13. using namespace std;
  14. # define LL long long
  15.  
  16. const int N=1005;
  17. const int INF=1000001;
  18.  
  19. struct Edge
  20. {
  21. int w,to,nxt;
  22. };
  23. Edge e[N];
  24. int n,m;
  25. int du[N];
  26. int maxn,cnt;
  27. int dp[N];
  28. int head[N];
  29.  
  30. void add(int u,int v,int w)
  31. {
  32. e[cnt].to=v;
  33. e[cnt].w=w;
  34. e[cnt].nxt=head[u];
  35. head[u]=cnt++;
  36. }
  37.  
  38. void init()
  39. {
  40. int a,b,c;
  41. cnt=maxn=0;
  42. memset(du,0,sizeof(du));
  43. memset(head,-1,sizeof(head));
  44. for(int i=1;i<n;++i){
  45. scanf("%d%d%d",&a,&b,&c);
  46. ++du[a];
  47. ++du[b];
  48. maxn=max(maxn,c);
  49. add(a,b,c);
  50. add(b,a,c);
  51. }
  52. }
  53.  
  54. void dfs(int u,int fa,int limit)
  55. {
  56. //cout<<u<<endl;
  57. if(du[u]==1&&u!=1){
  58. dp[u]=INF;
  59. return ;
  60. }
  61. dp[u]=0;
  62. for(int i=head[u];i!=-1;i=e[i].nxt){
  63. int v=e[i].to;
  64. if(v==fa) continue;
  65. dfs(v,u,limit);
  66. if(e[i].w>limit)
  67. dp[u]+=dp[v];
  68. else
  69. dp[u]+=min(dp[v],e[i].w);
  70. }
  71. }
  72.  
  73. int solve()
  74. {
  75. if(n==1)
  76. return 0;
  77. int l=1,r=maxn+1;
  78. while(l<r){
  79. int mid=l+(r-l)/2;
  80. dfs(1,-1,mid);
  81. if(dp[1]>m)
  82. l=mid+1;
  83. else
  84. r=mid;
  85. }
  86. dfs(1,-1,r);
  87. if(dp[1]>m) return -1;
  88. return r;
  89. }
  90.  
  91. int main()
  92. {
  93. //新的主题
  94. while(~scanf("%d%d",&n,&m)&&(n+m))
  95. {
  96. init();
  97. printf("%d\n",solve());
  98. }
  99. return 0;
  100. }

  

HDU-3586 Information Disturbing(树形DP+删边)的更多相关文章

  1. HDU - 3586 Information Disturbing 树形dp二分答案

    HDU - 3586 Information Disturbing 题目大意:从敌人司令部(1号节点)到前线(叶子节点)的通信路径是一个树形结构,切断每条边的联系都需要花费w权值,现在需要你切断前线和 ...

  2. HDU 3586.Information Disturbing 树形dp 叶子和根不联通的最小代价

    Information Disturbing Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/ ...

  3. HDU 3586 Information Disturbing 树形DP+二分

    Information Disturbing Problem Description   In the battlefield , an effective way to defeat enemies ...

  4. HDU 3586 Information Disturbing(二分+树形dp)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=3586 题意: 给定一个带权无向树,要切断所有叶子节点和1号节点(总根)的联系,每次切断边的费用不能超 ...

  5. 【题解】hdu 3586 Information Disturbing 二分 树形dp

    题目描述 Information DisturbingTime Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java ...

  6. hdu 3586 Information Disturbing(树形dp + 二分)

    本文出自   http://blog.csdn.net/shuangde800 题目链接:   hdu-3586 题意 给一棵n个节点的树,节点编号为1-n,根节点为1.每条边有权值,砍掉一条边要花费 ...

  7. HDU 3586 二分答案+树形DP判定

    HDU 3586 『Link』HDU 3586 『Type』二分答案+树形DP判定 ✡Problem: 给定n个敌方据点,1为司令部,其他点各有一条边相连构成一棵树,每条边都有一个权值cost表示破坏 ...

  8. [hdu3586]Information Disturbing树形dp+二分

    题意:给出一棵带权无向树,以及给定节点1,总约束为$m$,找出切断与所有叶子节点联系每条边所需要的最小价值约束. 解题关键:二分答案,转化为判定性问题,然后用树形dp验证答案即可. dp数组需要开到l ...

  9. HDU 3586 Information Disturbing (二分+树形dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3586 给定n个敌方据点,1为司令部,其他点各有一条边相连构成一棵树,每条边都有一个权值cost表示破坏 ...

  10. HDU 3586 Information Disturbing (树形DP,二分)

    题意: 给定一个敌人的通信系统,是一棵树形,每个节点是一个敌人士兵,根节点是commander,叶子是前线,我们的目的是使得敌人的前线无法将消息传到commander,需要切断一些边,切断每条边需要一 ...

随机推荐

  1. powershell ise好字库和diy配色文件分享

    Windows PowerShell ISE (集成脚本环境) 是 Win中自带的脚本编写工具. 在 Windows PowerShell ISE 中,可以在单个基于 Windows 的图形用户界面中 ...

  2. DotNetBar v12.6.0.4 Fully Cracked

    更新信息: http://www.devcomponents.com/customeronly/releasenotes.asp?p=dnbwf&v=12.6.0.4 如果遇到破解问题可以与我 ...

  3. Oracle创建用户并给用户授权查询指定表或视图的权限

    MSV31账户登录数据库进行如下操作: CREATE USER NORTHBOUND IDENTIFIED BY NORTHBOUND  DEFAULT TABLESPACE "TBS_DN ...

  4. 苹果 iOS 8 新固件新功能特性总结汇总 (苹果 iPhone/iPad 最新移动操作系统)

    苹果在 WWDC 2014 大会上正式发布了其最新的 OS X Yosemite 桌面系统以及 iOS 8 移动操作系统,虽然 iOS 8 依然延续了 iOS7 的扁平化设计风格,但在功能上却还是给我 ...

  5. <转>用thinkPHP实现验证码的功能

    许多系统的登录都有验证码,而如果使用thinkPHP框架搭建网站的话,验证码的生成和验证就比较容易了 1.生成验证码 thinkPHP有对应生成验证码的方法 要使用验证码,需要导入扩展类库中的ORG. ...

  6. 实用的WPF Xml的简易读写类以及用法示例

    转自:http://www.silverlightchina.net/html/study/WPF/2012/0808/17980.html 最近真是写博客写的不可收拾,今天再来一篇. 因为做一些程序 ...

  7. UITableView错误 ‘unable to dequeue a cell with identifier Cell'

    - (id)dequeueReusableCellWithIdentifier:(NSString *)identifier; - (id)dequeueReusableCellWithIdentif ...

  8. 配置VS2010具有代码提示功能

    Visual Assist X是一款非常好的Microsoft Visual Studio插件,可以支持Microsoft Visual Studio 2003,Microsoft Visual St ...

  9. 【LeetCode OJ】Best Time to Buy and Sell Stock III

    Problem Link: http://oj.leetcode.com/problems/best-time-to-buy-and-sell-stock-iii/ Linear Time Solut ...

  10. ERP客户关系渠管理(二十)

    渠道的需求: