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

 
题意 : 给定一个带权无向树,要切断所有叶子节点和1号节点(总根)的联系,每次切断边的费用不能超过上限limit,问在保证总费用<=m下的最小的limit。
 
显然最小的总费用和最小的limit不能同时维护,那么只能在dfs中维护一个然后另一个用特殊的(朗诵)技巧解决…… 
emmmmmmmmm……说白了就是二分求最小的limit,然后就没有下面了。
算是普通难度,只要知道二分就很好写,虽然我开始没有想到(捂脸),还是意识不够。
 
下面是代码  细长的代码非常丑所以删了一些换行,如果操作失误删掉一些奇怪东西导致不能AC,劳烦看官老爷自己再改改
 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn=;
int maxx=;
int t,n,m;
int f[maxn]={};//子代lim值
int he[maxn]={};//对应的和
int vis[maxn]={};
struct nod{
int y;
int next;
int v;
}e[*maxn]={};
int head[maxn]={},tot;
void init(int x,int y,int v){
e[++tot].y=y;
e[tot].v=v;
e[tot].next=head[x];
head[x]=tot;
}
bool dfs(int x,int ls,int sum){
int y,v;
vis[x]=;
for(int i=head[x];i;i=e[i].next){
y=e[i].y; v=e[i].v;
if((!vis[y])){
if(dfs(y,ls,sum-he[x])){
if(f[y]!=){
if(v<=ls&&v<he[y]){
f[x]=max(f[x],v); he[x]+=v;
}else{
f[x]=max(f[x],f[y]); he[x]+=he[y];
}
}else{
if(v<=ls){
f[x]=max(f[x],v); he[x]+=v;
}else{
if(x==){ return ; }
f[x]=; return ;
}
}if(he[x]>sum){
if(x==){ return ; }
f[x]=; return ;
}
}else{ return ; }
}
}
return ;
}
void yu(){
tot=; maxx=;
memset(f,,sizeof(f));
memset(he,,sizeof(he));
memset(vis,,sizeof(vis));
memset(head,,sizeof(head));
}
void yu2(){
memset(vis,,sizeof(vis));
memset(f,,sizeof(f));
memset(he,,sizeof(he));
}
int doit(){
int l=,r=maxx;
while(r-l>){
int md=(l+r)/; yu2();
if(dfs(,md,m)){ r=md; }
else{ l=md; }
}yu2();
if(dfs(,l,m)){ return l; }
yu2();
if(dfs(,r,m)){ return r; }
return -;
}
int main(){
for(;;){
yu();
scanf("%d%d",&n,&m);
if(n==&&m==){ break; }
int x,y,v;
for(int i=;i<n;i++){
scanf("%d%d%d",&x,&y,&v);
maxx=max(maxx,v);
init(x,y,v);
init(y,x,v);
}
cout<<doit()<<endl;
}
return ;
}

HDU3585 Information Disturbing 树形dp+二分的更多相关文章

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

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

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

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

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

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

  4. hdu3586 Information Disturbing 树形DP+二分

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

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

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

  6. [HDU3586]Information Disturbing(DP + 二分)

    传送门 题意:给定一个带权无向树,要切断所有叶子节点和1号节点(总根)的联系,每次切断边的费用不能超过上限limit,问在保证总费用<=m下的最小的limit 二分答案,再 DP,看看最终结果是 ...

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

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

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

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

  9. BZOJ3420[POI2013]Triumphal arch&BZOJ5174[Jsoi2013]哈利波特与死亡圣器——树形DP+二分答案

    题目大意: 给一颗树,1号节点已经被染黑,其余是白的,两个人轮流操作,一开始B在1号节点,A选择k个点染黑,然后B走一步,如果B能走到A没染的节点则B胜,否则当A染完全部的点时,A胜.求能让A获胜的最 ...

随机推荐

  1. 【BZOJ】1415 [Noi2005]聪聪和可可 期望DP+记忆化搜索

    [题意]给定无向图,聪聪和可可各自位于一点,可可每单位时间随机向周围走一步或停留,聪聪每单位时间追两步(先走),问追到可可的期望时间.n<=1000. [算法]期望DP+记忆化搜索 [题解]首先 ...

  2. 20155117王震宇 2006-2007-2 《Java程序设计》第一周学习总结

    20155117王震宇 2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 尽量简单的总结一下本周学习内容 尽量不要抄书,浪费时间 看懂就过,看不懂,学习有心得的 ...

  3. Openflow Plugin学习笔记2

    OpenDaylight OpenFlow Plugin 过载保护 过载保护 OF Plugin中的过载保护按如下流程工作: ConnectionConductor将消息送入队列,是最靠近OFJava ...

  4. python3.4.3安装allure2记录

    一.安装:cmd执行命令pip install allure-pytest 二.下载allure2:2.7.0版本 https://dl.bintray.com/qameta/generic/io/q ...

  5. 2017-2018 ACM-ICPC, NEERC, Southern Subregional Contest, qualification stage

    2017-2018 ACM-ICPC, NEERC, Southern Subregional Contest, qualification stage A. Union of Doubly Link ...

  6. Python Random模块生成伪随机数字

    This module implements pseudo-random number generators for various distributions. 对于整数,有一个范围的均匀选择: 对 ...

  7. StringBuilder基本用法

    //StringBuilder用法 public class StringBuilderTest { public static void main(String[] args) { StringBu ...

  8. appium+python自动化39-adb shell输入中文(ADBKeyBoard)

    前言 上一篇提到"adb shell input textyoyo" 可以通过adb 输入英文的文本,由于不支持unicode编码,所以无法输入中文,github上有个国外的大神写 ...

  9. 【PAT】1004. 成绩排名 (20)

    1004. 成绩排名 (20) 读入n名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式:每个测试输入包含1个测试用例,格式为 第1行:正整数n 第2行:第1个学生的姓名 ...

  10. 【LOJ】#2085. 「NOI2016」循环之美

    题解 我们要求的其实是这个东西= = \(\sum_{i = 1}^{n}\sum_{j = 1}^{n}[(i,j) == 1][(j,k) == 1]\) 然后变一下形 \(\sum_{j = 1 ...