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 ;
}

云流

点分治 [IOI2011]Race的更多相关文章

  1. BZOJ 2599: [IOI2011]Race( 点分治 )

    数据范围是N:20w, K100w. 点分治, 我们只需考虑经过当前树根的方案. K最大只有100w, 直接开个数组CNT[x]表示与当前树根距离为x的最少边数, 然后就可以对根的子树依次dfs并更新 ...

  2. [IOI2011]Race 点分治

    [IOI2011]Race LG传送门 点分治板子题. 直接点分治统计,统计的时候开个桶维护下就好了. 注(tiao)意(le)细(hen)节(jiu). #include<cstdio> ...

  3. [bzoj2599][IOI2011]Race——点分治

    Brief Description 给定一棵带权树,你需要找到一个点对,他们之间的距离为k,且路径中间的边的个数最少. Algorithm Analyse 我们考虑点分治. 对于子树,我们递归处理,所 ...

  4. 模板—点分治B(合并子树)(洛谷P4149 [IOI2011]Race)

    洛谷P4149 [IOI2011]Race 点分治作用(目前只知道这个): 求一棵树上满足条件的节点二元组(u,v)个数,比较典型的是求dis(u,v)(dis表示距离)满足条件的(u,v)个数. 算 ...

  5. 【BZOJ2599】[IOI2011]Race 树的点分治

    [BZOJ2599][IOI2011]Race Description 给一棵树,每条边有权.求一条简单路径,权值和等于K,且边的数量最小.N <= 200000, K <= 100000 ...

  6. [IOI2011]Race

    2599: [IOI2011]Race Time Limit: 70 Sec  Memory Limit: 128 MBhttp://www.lydsy.com/JudgeOnline/problem ...

  7. bzoj 2599 [IOI2011]Race 点分

    [IOI2011]Race Time Limit: 70 Sec  Memory Limit: 128 MBSubmit: 4768  Solved: 1393[Submit][Status][Dis ...

  8. 2599: [IOI2011]Race

    2599: [IOI2011]Race 链接 分析 被memset卡... 点分治,对于重心,遍历子树,记录一个数组T[i],表示以重心为起点的长度为i的路径中最少的边数是多少.然后先遍历子树,更新答 ...

  9. bzoj2599: [IOI2011]Race(点分治)

    写了四五道点分治的题目了,算是比较理解点分治是什么东西了吧= = 点分治主要用来解决点对之间的问题的,比如距离为不大于K的点有多少对. 这道题要求距离等于K的点对中连接两点的最小边数. 那么其实道理是 ...

随机推荐

  1. vue-router 的URL路径中#的意义

    传送门 https://router.vuejs.org/zh-c... Router 构造配置 routes 类型: Array<RouteConfig> RouteConfig 的类型 ...

  2. CMake - boost - 可运行程序 - 静态库

    CMake - boost 最后更新日期:2014-04-25by kagula 阅读前提:<CMake入门(二)>.Linux的基本操作 环境: Windows 8.1 64bit英文版 ...

  3. 百科知识 ass文件如何打开

    直接拖入视频即可播放 鼠标右键 用记事本打开 也有一些软件支持比如POPSUB(也比较方便调整时间轴) 如果你是说如何加载字幕的话 用VOBSUB是最好的... ASS是视频的字幕,和视频放在同一文件 ...

  4. awk中的NR FNR

    shell编程中,awk简直就是一把利器,你能够把它看成shell的一部分,也能够看成一种单独的语言,功能十分强大.今天先来说一说NR与FNR 先准备两个文件: 1.txt,内容为: user pas ...

  5. codeforces 553 D Nudist Beach

    题意大概是.给出一个图,保证每一个点至少有一条边以及随意两点间最多一条边.非常显然这个图有众多点集,若我们给每一个点定义一个权值,那每一个点集都有一个最小权值点,如今要求出一个点集,这个点集的最小权值 ...

  6. android页面间传递对象

    android传递对象有两种方式: 一种是Serializable和Parcelable 对于第一种方式: import java.io.Serializable; public class Shop ...

  7. VueJS数据绑定文本显示:{{message}}

    HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <titl ...

  8. Python web 框架:web.py

    web.py 是一个Python 的web 框架,它简单而且功能强大.web.py 是公开的,无论用于什么用途都是没有限 制的. web.py 安装: pip install web.py 下面开始我 ...

  9. Fighting regressions with git bisect---within git bisect algorithm

    https://www.kernel.org/pub/software/scm/git/docs/git-bisect-lk2009.html Fighting regressions with gi ...

  10. 系统安全-Man in the middleattack

    窃听VS加密(解决数据机密性) 加密由两部分组成:算法&秘钥(算法要够复杂,秘钥要够安全) 对称加密:(Symmetric encryption) 采用单秘钥密码系统的加密方法,同一个秘钥可以 ...