传送门

题意:给定一个带权无向树,要切断所有叶子节点和1号节点(总根)的联系,每次切断边的费用不能超过上限limit,问在保证总费用<=m下的最小的limit

二分答案,再 DP,看看最终结果是否小于 m

——代码

 #include <cstdio>
#include <cstring>
#include <iostream>
#define N 1001
#define max(x, y) ((x) > (y) ? (x) : (y)) int n, m, cnt, ans;
int a[N], sum[N], head[N], to[N << ], val[N << ], next[N << ];
bool vis[N]; inline int read()
{
int x = , f = ;
char ch = getchar();
for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -;
for(; isdigit(ch); ch = getchar()) x = (x << ) + (x << ) + ch - '';
return x * f;
} inline void add(int x, int y, int z)
{
to[cnt] = y;
val[cnt] = z;
next[cnt] = head[x];
head[x] = cnt++;
} inline void dfs(int u, int x)
{
int i, v;
vis[u] = ;
for(i = head[u]; i ^ -; i = next[i])
{
v = to[i];
if(!vis[v])
{
dfs(v, x);
if(val[i] <= x)
{
if(val[i] < sum[v]) sum[u] += val[i];
else sum[u] += sum[v];
}
else sum[u] += sum[v];
}
}
} inline bool check(int x)
{
memset(vis, , sizeof(vis));
memset(sum, , sizeof(sum));
for(int i = ; i <= n; i++)
if(a[i] == )
sum[i] = m + ;
dfs(, x);
return sum[] <= m;
} int main()
{
int i, x, y, z, mid;
while()
{
cnt = ;
n = read();
m = read();
if(!n && !m) break;
memset(a, , sizeof(a));
memset(head, -, sizeof(head));
for(i = ; i < n; i++)
{
a[x = read()]++;
a[y = read()]++;
z = read();
add(x, y, z);
add(y, x, z);
}
x = , y = m, ans = -;
while(x <= y)
{
mid = (x + y) >> ;
if(check(mid)) ans = mid, y = mid - ;
else x = mid + ;
}
printf("%d\n", ans);
}
return ;
}

最新文章

  1. DataGridView
  2. Swift实现截屏并保存相册
  3. SimpleDateFormatter Java中的用法
  4. mysql基础知识(4)--修改
  5. VirtualBox虚拟机安装MSDOS和MINIX2.0.0双系统
  6. asp.net弹出框后页面走样
  7. pyqt动态创建一系列组件并绑定信号和槽(网友提供学习)
  8. 基于pytorch实现HighWay Networks之Highway Networks详解
  9. Sublime text3 连接sftp/ftp(远程服务器)
  10. Apache Kylin学习资料
  11. 在Netbeans的项目中添加JDBC驱动程序
  12. python魔法方法-属性访问控制
  13. Echarts 简单报表系列二:折线图
  14. 通过springboot 去创建和提交一个表单(七)
  15. Android开发---如何操作资源目录中的资源文件4 ---访问xml的配置资源文件的内容
  16. iOS-如何让xcode自动检查内存泄露
  17. Shell编程之数组使用
  18. python正则表达式转义注意事项
  19. JavaScript DOM编程艺术学习笔记-第二章JavaScript语法
  20. mysql root 密码恢复

热门文章

  1. bzoj 4424: Cf19E Fairy &amp;&amp; codeforces 19E. Fairy【树形dp】
  2. java自学-方法
  3. Ajax 知识点总结
  4. [转]mysql常用函数
  5. c# Queue实现生产者(Producer)消费者(Consumer)模式
  6. 动态属性ExpandoObject
  7. Hacker News的热门排名算法(转)
  8. Python基础:基本数据类型
  9. Apache ab使用指南
  10. 【C++】智能指针简述(六):智能指针总结及补充