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. 【CodeForces】932 E. Team Work

    [题目]E. Team Work [题意]给定n和k,n个人中选择一个大小为x非空子集的代价是x^k,求所有非空子集的代价和%1e9+7.n<=10^9,k<=5000. [算法]斯特林反 ...

  2. Git其他的命令------(四)

    git除了在工作当中可以进行对代码进行管理的设置之外,git的其他指令也偶尔会被用到~ 1:删除某一个文件:   rm -rf node,然后按下tab 2:查看修改文件的修改的详细信息:  git ...

  3. Struts访问servletAPI方式

    1.原理

  4. Linux下帮助命令

    帮助命令(各种命令区别)   最常用的帮助命令   help --help help cd 查看内置命令的使用 info man   help cd 查看内置命令的使用   获得帮助的途径:   ma ...

  5. 47、求1+2+3+...+n

    一.题目 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 二.解法 public class Solut ...

  6. dm368 ipnc3.0环境搭建脚本

    前言 为了方便其他人搭建dm368 ipnc3.0环境,我写了个脚本,执行脚本就可以自动搭建好环境了,绝对的傻瓜操作了,不过有一个地方让我很郁闷,那就是在用sed替换掉某段内容的时候(143行--15 ...

  7. linux常用函数简单介绍

    mmap函数简介: mmap函数是unix/linux下的系统调用,来看<Unix Netword programming>卷二12.2节对mmap的介绍: The mmap functi ...

  8. (正则表达式)linux shell 字符串操作(长度,查找,替换,匹配)详解

    在做shell批处理程序时候,经常会涉及到字符串相关操作.有很多命令语句,如:awk,sed都可以做字符串各种操作. 其实shell内置一系列操作符号,可以达到类似效果,大家知道,使用内部操作符会省略 ...

  9. Django Authentication 用户认证系统

    一. Django的认证系统 Django自带一个用户认证系统,用于处理用户账户.群组.许可和基于cookie的用户会话. 1.1 概览 Django的认证系统包含了身份验证和权限管理两部分.简单地说 ...

  10. python模块之xml.etree.ElementTree

    xml.etree.ElementTree用于解析和构建XML文件 <?xml version="1.0"?> <data> <country nam ...