HDU 3586 Information Disturbing 树状DP+二分
来源:互联网 发布:2017大数据的特征包含 编辑:程序博客网 时间:2024/05/23 18:45
题意:给出一棵树,和每条边的cost值,设置一个界限,要求切断所有叶子结点,切断的边的cost不能超过界限值,并且切断的边的总和不能超过m,求出这个最小界限值。
思路:二分枚举最小界限值,用树状DP求出在这个限制下的最小花费是否小于m。
#include <cstdio>#include <cstring>#include <string>#include <iostream>#include <queue>#include <algorithm>#include <map>#include <vector>#include <cmath>#include <stack>using namespace std;#define ll long long#define int64 __int64#define M 100005#define N 1005#define inf 1000010#define mod 1000000007struct node{int ev , cost;};int n , m , MAX , dp[N];vector<node> son[N];void Dfs(int s , int fa , int k){int i , up = son[s].size() , fg = 0;dp[s] = 0;for (i = 0 ; i < up ; i++){int v = son[s][i].ev;int cost = son[s][i].cost;if (v == fa)continue;fg = 1;Dfs(v,s,k);if (cost <= k)dp[s] += min(dp[v],cost);else dp[s] += dp[v];}if(!fg)dp[s] = inf;}int Solve(){int l = 0 , r = MAX , mid , ret = -1;while (l <= r){mid = (l+r)>>1;Dfs(1,0,mid);if (dp[1] <= m){ret = mid;r = mid-1;}elsel = mid+1;}return ret;}int main(){while (scanf("%d%d",&n,&m) , m+n){int i;MAX = 0;for (i = 1 ; i < n ; i++){int s , e , w;scanf("%d%d%d",&s,&e,&w);node temp;temp.ev = e;temp.cost = w;son[s].push_back(temp);temp.ev = s;son[e].push_back(temp);MAX = max(MAX,w);}printf("%d\n",Solve());for (i = 1 ; i <= n ; i++)son[i].clear();}return 0;}
- hdu 3586 Information Disturbing 二分+树状DP
- HDU 3586 Information Disturbing 树状DP+二分
- hdu 3586 Information Disturbing 树形dp+二分
- HDU 3586 Information Disturbing 二分+树形DP
- HDU 3586 Information Disturbing (树形DP+二分)
- HDU 3586 Information Disturbing 树形DP+二分
- hdu 3586 Information Disturbing 树形dp+二分
- HDU 3586 Information Disturbing(树形DP + 二分)
- 【HDU】3586 Information Disturbing 二分+树形dp
- HDU 3586 Information Disturbing(二分+数形DP)
- hdu 3586 Information Disturbing(树形dp + 二分)
- hdu 3586 Information Disturbing(树形DP+二分查找+删变暖)
- hdu 3586 Information Disturbing(二分+树dp)
- hdu 3586 Information Disturbing (树形dp+二分)
- HDU 3586 - Information Disturbing(二分+树形DP)
- hdu 3586 Information Disturbing (树形dp+二分)
- HDU 3586 Information Disturbing (树形dp+二分)
- HDU 4586 Information Disturbing 二分+树形dp
- java获取路径
- Oracle开发之:窗口函数 (转) rows between unbounded preceding and current row .
- struts2拦截器使用(用户session失效后的统一页面指向)
- QListWidge中item灰化以及添加自定义widget灰化!
- android 4.0 无线ip修改
- HDU 3586 Information Disturbing 树状DP+二分
- Hibernate的Annotation中实体BLOB、CLOB类型的注解
- [转]C#自定义开关按钮控件--附带第一个私活项目截图
- 江苏女童赤身抽烟乞讨 民政局称其父壮劳力不能享低保
- hadoop 学习总结1
- GridView中合并单元格
- linux c ip过滤 正则表达式 初步代码
- FREESWITCH SEESION
- Jsp进行页面自动调整的方法