hdoj 3586 Information Disturbing(二分答案+树dp判断)
2012-04-04 00:49
274 查看
【题目大意】:给出一个n,m以及n-1条边构成的网络,要求切去其所有的叶子节点,且代价和不能超过m,先在问你切去的边中的最大的边最小是多少。
【解题思路】:最大值最小问题,二分。之后用树dp判断。dp[u]表示u为根的树切去叶子节点之后的总代价。则当代价和超过m或当前边代价大于二分出的答案的时候,dp[u]=dp[u]+dp[v]。反之dp[u]=dp[u]+w; 最后询问dp[1]跟m的关系就可以了
【代码】:
【解题思路】:最大值最小问题,二分。之后用树dp判断。dp[u]表示u为根的树切去叶子节点之后的总代价。则当代价和超过m或当前边代价大于二分出的答案的时候,dp[u]=dp[u]+dp[v]。反之dp[u]=dp[u]+w; 最后询问dp[1]跟m的关系就可以了
【代码】:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <queue> #include <cmath> #include <string> #include <cctype> #include <map> #include <iomanip> using namespace std; #define eps 1e-8 #define pi acos(-1.0) #define inf 1<<30 #define linf 1LL<<60 #define pb push_back #define lc(x) (x << 1) #define rc(x) (x << 1 | 1) #define lowbit(x) (x & (-x)) #define ll long long int n,m; int tot,eh[1010]; int dp[1010]; struct Edge { int v,w,next; }et[4010]; void init() { tot=0; memset(eh,-1,sizeof(eh)); } void addedge(int u,int v,int w) { Edge e={v,w,eh[u]}; et[tot]=e; eh[u]=tot++; } void dfs(int fa,int u,int lim){ dp[u]=0; for (int i=eh[u]; i!=-1; i=et[i].next){ int v=et[i].v,w=et[i].w; if (v!=fa){ dfs(u,v,lim); if (w<=lim && w<dp[v]) dp[u]+=w; else dp[u]+=dp[v]; } } if (dp[u]==0) dp[u]=m+1; return ; } bool check(int lim){ dfs(-1,1,lim); if (dp[1]>m) return false; else return true; } int main() { while (~scanf("%d%d",&n,&m)){ int u,v,w; if (n==0 && m==0) break; init(); for (int i=0; i<n-1; i++){ scanf("%d%d%d",&u,&v,&w); addedge(u,v,w); addedge(v,u,w); } int l=1,r=1000,mid; int ans=inf; while (l<=r){ int mid=(l+r)/2; if (check(mid)) ans=mid,r=mid-1; else l=mid+1; } if (ans==inf) cout << -1 << endl; else cout << ans << endl; } return 0; }
相关文章推荐
- HDOJ 3586 Information Disturbing(二分答案+树DP)
- HDOJ 3715 - Go Deeper 二分+2-sat判断
- Codeforces Round #378 (Div. 2) D题(二分答案,贪心判断)
- 二分答案加DP判断
- USACO Jan08 (COGS 174) 架设电话线 二分答案,缩点,BFS判断可行性
- HDOJ-----4751---Divide Groups二分判断
- [HDOJ 3432][BNUOJ 7543] Wax [计算几何+二分答案]
- hdoj 3715 Go Deeper 【2-sat 判断可行解 + 二分】
- noip2010 关押罪犯 二分答案+二分图判断
- hrbust 1806 方方(二分答案+2-SAT可行性判断)
- hdu 3622 Bomb Game(二分答案+2-sat判断答案可行性)
- HDOJ 3715 Go Deeper (2Sat: 二分答案判定)
- hihocoder hiho第38周: 二分·二分答案 (二分搜索算法应用:二分搜索值+bfs判断可行性 )
- POJ2010 Moo University - Financial Aid —— 二分答案+巧妙的判断
- hdu 3681 二分枚举答案+dp判断答案
- bzoj 1532 二分答案+最大流判断
- poj3261 Milk Patterns【二分答案+后缀数组】
- BZOJ 1189: [HNOI2007]紧急疏散evacuate|网络流|二分答案
- luogu1396 二分答案或者并查集水题
- POJ 2318 点在凸四边形内的判断(叉积+二分)