题目链接

hdu3586

题解

二分 + 简单的树形dp

我正有练一下dp的必要了

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define LL long long int
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define BUG(s,n) for (int i = 1; i <= (n); i++) cout<<s[i]<<' '; puts("");
using namespace std;
const int maxn = 1005,maxm = 100005,INF = 1000000000;
inline int read(){
int out = 0,flag = 1; char c = getchar();
while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}
while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}
return out * flag;
}
int h[maxn],ne = 2;
struct EDGE{int to,nxt,w;}ed[maxm];
inline void build(int u,int v,int w){
ed[ne] = (EDGE){v,h[u],w}; h[u] = ne++;
ed[ne] = (EDGE){u,h[v],w}; h[v] = ne++;
}
int fa[maxn],w[maxn];
int n,m,lim;
void DFS(int u){
Redge(u) if ((to = ed[k].to) != fa[u]){
fa[to] = u; w[to] = ed[k].w;
DFS(to);
}
}
LL f[maxn][2];
void dfs(int u){
if (w[u] <= lim) f[u][1] = w[u];
else f[u][1] = INF;
f[u][0] = 0;
int cnt = 0;
Redge(u) if ((to = ed[k].to) != fa[u]){
dfs(to); cnt++;
f[u][0] += min(f[to][0],f[to][1]);
}
if (!cnt) f[u][0] = INF;
}
bool check(int x){
lim = x;
dfs(1);
return f[1][0] <= m;
}
int main(){
while ((n = read()) && (m = read())){
memset(h,0,sizeof(h)); ne = 2;
int a,b,w;
for (int i = 1; i < n; i++){
a = read(); b = read(); w = read();
build(a,b,w);
}
DFS(1);
int l = 1,r = m,mid;
while (l < r){
mid = l + r >> 1;
if (check(mid)) r = mid;
else l = mid + 1;
}
if (check(l)) printf("%d\n",l);
else puts("-1");
}
return 0;
}

最新文章

  1. 版本控制-svn服务器搭建和常用命令(centos 6.3)
  2. python之import子目录文件
  3. phonegap创建的ios项目推送消息出现闪退现象
  4. javascript中的闭包解析
  5. Linux下svn提交文件后自动同步更新到网站目录
  6. vs2015-Azure Mobile Service
  7. Oozie 中各种类型的作业执行结果记录
  8. android131 360 03 输入密码
  9. 转: cmd和amd的区别
  10. Mac iterm2 linux vim 语言问题
  11. Mysql安装后打开MySQL Command Line Client闪退解决方法
  12. [转].NET程序破解仅需三步
  13. 触发器 评论折叠显示(jquery)
  14. Jsoup解析XML
  15. mock数据,尽量随机,1次插入多条
  16. mysql之外键
  17. HP服务器安装配置教程
  18. Sequelize-nodejs-13-Working with legacy tables
  19. UART通信协议
  20. oracle 截取字符(substr),检索字符位置(instr)

热门文章

  1. 2018.6.29 JavaScript
  2. python_19_编码解码
  3. Elastic Stack 安装
  4. LIS最长上升子序列模板
  5. mysql优化之explain各参数详解:
  6. base64转图片上传
  7. win 系统下制作U盘安装 linux系统
  8. 1px移动端显示问题
  9. java util - MD5/AES/RSA快速调用工具
  10. 动态规划、记忆化搜索:HDU1978-How many ways