http://acm.split.hdu.edu.cn/showproblem.php?pid=3586

题意 : 给定一个带权无向树,要切断所有叶子节点和1号节点(总根)的联系,每次切断边的费用不能超过上限limit,问在保证总费用<=m下的最小的limit。
 
显然最小的总费用和最小的limit不能同时维护,那么只能在dfs中维护一个然后另一个用特殊的(朗诵)技巧解决…… 
emmmmmmmmm……说白了就是二分求最小的limit,然后就没有下面了。
算是普通难度,只要知道二分就很好写,虽然我开始没有想到(捂脸),还是意识不够。
下面是代码  细长的代码非常丑所以删了一些换行,如果操作失误删掉一些奇怪东西导致不能AC,劳烦看官老爷自己再改改

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 #include<cmath>
 6 using namespace std;
 7 const int maxn=1010;
 8 int maxx=0;
 9 int t,n,m;
10 int f[maxn]={};//子代lim值
11 int he[maxn]={};//对应的和
12 int vis[maxn]={};
13 struct nod{
14     int y;
15     int next;
16     int v;
17 }e[2*maxn]={};
18 int head[maxn]={},tot;
19 void init(int x,int y,int v){
20     e[++tot].y=y;
21     e[tot].v=v;
22     e[tot].next=head[x];
23     head[x]=tot;
24 }
25 bool dfs(int x,int ls,int sum){
26     int y,v;
27     vis[x]=1;
28     for(int i=head[x];i;i=e[i].next){
29         y=e[i].y; v=e[i].v;
30         if((!vis[y])){
31             if(dfs(y,ls,sum-he[x])){
32                 if(f[y]!=0){
33                     if(v<=ls&&v<he[y]){
34                         f[x]=max(f[x],v); he[x]+=v;
35                     }else{
36                         f[x]=max(f[x],f[y]); he[x]+=he[y];
37                     }
38                 }else{
39                     if(v<=ls){
40                         f[x]=max(f[x],v); he[x]+=v;
41                     }else{
42                         if(x==1){ return 0; }
43                         f[x]=0; return 1;
44                     }
45                 }if(he[x]>sum){
46                     if(x==1){ return 0; }
47                     f[x]=0; return 1;
48                 }
49             }else{ return 0; }
50         }
51     }
52     return 1;
53 }
54 void yu(){
55     tot=0; maxx=0;
56     memset(f,0,sizeof(f));
57     memset(he,0,sizeof(he));
58     memset(vis,0,sizeof(vis));
59     memset(head,0,sizeof(head));
60 }
61 void yu2(){
62     memset(vis,0,sizeof(vis));
63     memset(f,0,sizeof(f));
64     memset(he,0,sizeof(he));
65 }
66 int doit(){
67     int l=1,r=maxx;
68     while(r-l>1){
69         int md=(l+r)/2; yu2();
70         if(dfs(1,md,m)){ r=md; }
71         else{ l=md; }
72     }yu2();
73     if(dfs(1,l,m)){ return l; }
74     yu2();
75     if(dfs(1,r,m)){ return r; }
76     return -1;
77 }
78 int main(){
79     for(;1;){
80         yu();
81         scanf("%d%d",&n,&m);
82         if(n==0&&m==0){ break; }
83         int x,y,v;
84         for(int i=1;i<n;i++){
85             scanf("%d%d%d",&x,&y,&v);
86             maxx=max(maxx,v);
87             init(x,y,v);
88             init(y,x,v);
89         }
90         cout<<doit()<<endl;
91     }
92     return 0;
93 }

View Code

转载于:https://www.cnblogs.com/137shoebills/p/7783898.html

HDU3585 Information Disturbing 树形dp+二分相关推荐

  1. 两种解法-树形dp+二分+单调队列(或RMQ)-hdu-4123-Bob’s Race

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4123 题目大意: 给一棵树,n个节点,每条边有个权值,从每个点i出发有个不经过自己走过的点的最远距离 ...

  2. D. Serval and Rooted Tree(思维+树形dp+二分辅助)

    https://codeforces.com/problemset/problem/1153/D 思路:参考issue https://issue-is-vegetable.blog.csdn.net ...

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

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

  4. 【bzoj2500】幸福的道路 树形dp+倍增RMQ+二分

    原文地址:http://www.cnblogs.com/GXZlegend/p/6825389.html 题目描述 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一 ...

  5. 吉吉王国(二分+树形dp)

    吉吉王国 题意: n个点,m个边,有边权,现在要求叶子节点无法与1号点连通,要求切断的总长度不能超过m,且切断的最长的长度尽可能断 题解: 题意的前半部分可以确定是树形dp,后半部分可以确定为是二分 ...

  6. P3994 高速公路 树形DP+斜率优化+二分

    $ \color{#0066ff}{ 题目描述 }$ C国拥有一张四通八达的高速公路网树,其中有n个城市,城市之间由一共n-1条高速公路连接.除了首都1号城市,每个城市都有一家本地的客运公司,可以发车 ...

  7. LibreOJ #2478.「九省联考 2018」林克卡特树 树形dp+带权二分

    题意 给出一棵n个节点的树和k,边有边权,要求先从树中选k条边,然后把这k条边删掉,再加入k条边权为0的边,满足操作完后的图仍然是一棵树.问新树的带权直径最大是多少. n,k≤3∗105n,k≤3∗1 ...

  8. P4383 [八省联考2018]林克卡特树(树形dp+wqs二分)

    [八省联考2018]林克卡特树 题目大意:给定一棵有负权边的树,现在必须恰好删去 k k k条边,并加上恰好 k k k条权值为 0 0 0的边,要求最大化它的直径长度. 首先考虑删去 K K K条边 ...

  9. 树形DP总结,持续更新

    自己做了动态规划的题目已经有了一个月,但是成效甚微,所以来总结一下动态规划,希望自己能够温故知新.这个博客是关于树形dp的,动态规划的一类题目. 首先从最简单的树形DP入手,树形DP顾名思义就是一棵树 ...

最新文章

  1. 使用CSS 3创建不规则图形
  2. 传统方法的点云分割以及PCL中分割模块
  3. 使用Fastjson解析List对象时出现:{“$ref“:“$.data[0].task.OBJECTS[0]“}的问题原因及解决方法
  4. 位于/var/log目录下的20个Linux日志文件
  5. Athentech Perfectly Clear中文版
  6. AutoHotkey纯命令获取Chrome等浏览器的当前网址
  7. 货店管理(delphi+sqlserver)
  8. d3 i5 神舟精盾k480n_6款神舟精盾轻薄记本发布,10nm十代酷睿,匠心打造国潮好本...
  9. 2020中国移动阅读行业报告
  10. mysql sillyr x.so_mysql2.so:libmysqlclient_r.so.15:无法打开共享对象文件:没有这样的文件或目录...
  11. 移动端mintUI mt-datetime-picker 组件使用详解
  12. 2015年度夏季假期学习内容
  13. 斐讯K3官改,安装onmp教程,回馈社区。
  14. 计算机主机三维模型,三维模型
  15. 软件开发常用图标网址大全
  16. 水安ABC考试多选练习题库
  17. Gson解析异常com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN解决方案
  18. Ascent代码分析4-World之地图管理及实现结构
  19. python 线性回归函数_8种用Python实现线性回归的方法,究竟哪个方法最高效?
  20. Unity游戏开发——unity接入多渠道sdk

热门文章

  1. 数据增强语义分割和作物杂草分类
  2. 基于卷积神经网络的大豆病害识别
  3. oracle多表嵌套查询使用,oracle sql 多表 嵌套子查询 连接查询, join where exist i...
  4. web 导出文件时如何让用户选择路径_Visual Paradigm 教程[UML]:如何绘制动画UML活动图?...
  5. matlab ifft频率分辨率,[FFT] matlab中关于FFT的使用(理解频率分辨率、补零问题)
  6. 识别速度3.6ms/帧!人像抠图、工业质检、遥感识别,用这一个分割模型就够了...
  7. 在真实数据集上的随机森林模型参数调优
  8. jsp+mysql汽车维修管理系统的设计与开发_基于JSP+MySQl的计算机学院设备报修管理系统.doc...
  9. 计算机用户在使用计算机文件时6,201606-计算机基础选择题(含答案)(6页)-原创力文档...
  10. Android星座查询实验报告,数字基带传输实验实验报告