点分治 [IOI2011]Race
2024-09-08 04:43:21
BZOJ2599.
放板子。利用agc009-D 代码简洁了很多
#include <bits/stdc++.h>
#define N 200005
using namespace std;
int n,m,K,F[N][],H[N],x,y,z,h[N],f[],T,O,e[N],ans,d[N],g[N],t;
vector <int> a[N],b[N];
void QH(int x,int fa){
int y,z=-;
for (int i=;i<a[x].size();++i)
if (a[x][i]!=fa){
QH(y=a[x][i],x);
for (int j=;j<;++j){
if (F[y][j]&F[x][j]) z=max(z,j);
F[x][j]|=F[y][j];
}
}
for (++z;F[x][z];++z);
F[x][z]=; H[x]=z;
for (--z;~z;--z) F[x][z]=;
}
void dfs(int x,int y,int o){
if (h[x]>K) return;
d[++t]=h[x]; g[t]=o; e[++T]=x;
ans=min(ans,f[K-h[x]]+o);
for (int i=;i<a[x].size();++i)
if (H[a[x][i]]<O&&a[x][i]!=y){
h[a[x][i]]=h[x]+b[x][i];
dfs(a[x][i],x,o+);
}
}
void go(int x){
O=H[x]; h[x]=T=;
for (int i=;i<a[x].size();++i)
if (H[a[x][i]]<O){
h[a[x][i]]=h[x]+b[x][i];
t=; dfs(a[x][i],x,);
for (int j=;j<=t;++j) f[d[j]]=min(f[d[j]],g[j]);
}
for (int i=;i<=T;++i) f[h[e[i]]]=n+;
}
int main(){
scanf("%d%d",&n,&K);
for (int i=;i<n;++i){
scanf("%d%d%d",&x,&y,&z);
++x; ++y;
a[x].push_back(y);
b[x].push_back(z);
a[y].push_back(x);
b[y].push_back(z);
}
QH(,); ans=n+;
for (int i=;i<=K;++i) f[i]=n+;
for (int i=;i<=n;++i) go(i);
printf("%d\n",ans>n?-:ans);
return ;
}
云流
最新文章
- 在XP上运行IIS5.1新建站点
- .Net 中的反射(反射特性) - Part.3
- SQL中CHARINDEX()/INSTR()函数和SUBSTRING()/SUBSTR()函数
- 对EBS中配置文件的初步认识
- SSH命令行上传/下载文件
- C# 创建线程的简单方式:异步委托 .
- oracle删除当前用户下所有表
- JavaScript中几个可以转化为false的值
- 【转】Date类学习总结(Calendar Date 字符串 相互转换 格式化)
- 织梦dedecms自定义字段在首页列表页文章页的调用
- HTTP Basic Authentication认证的各种语言 后台用的
- (转)没有IE就没有伤害!浏览器兼容性问题解决方案汇总
- java网络编程(4)——udp实现聊天
- 关于vue中this.attr代替this.data.attr访问的原理
- Perf -- Linux下的系统性能调优工具,第 1 部分【转】
- visual studio 2017使用技巧
- Linux 下安装 MATLAB
- JS实现悬浮导航的制作(附源码)--web前端
- SQL记录-PLSQL条件控制
- hdu 2519 求组合数
热门文章
- 两点C#的propertyGrid的使用心得【转】
- Six ways to think like a journalist!
- UVA571 - Jugs(数论)
- java性能监控工具jconsole-windows
- vue native
- Atitit.ati&;#160;&;#160;str&;#160;&;#160;字符串增强api
- Hdu-1565 方格取数(1) (状态压缩dp入门题
- Laravel建站04--建立后台文章管理
- iOS_12_tableViewCell的删除更新_红楼梦
- 五、Web框架基础(2)