题目:一棵树,每条边有权.求一条路径,权值和等于K,且边的数量最小.

点分治,我们考虑经过根节点的路径,t[x]表示路径长为x时最少的边数,然后每次拿栈记下来清空。

注意先搜索再更新,这样可以避免同一子树内互相到达。

By:大奕哥

 #include<bits/stdc++.h>
using namespace std;
const int N=2e5+,inf=1e9,M=1e6+;;
int n,k,rt,cnt,head[N],s[N],f[N],t[M],ans,maxn,sta[N],top,dis[N],d[N];
bool v[N];
struct node{
int to,nex,w;
}e[N<<];
void add(int x,int y,int w)
{
e[++cnt].w=w;e[cnt].nex=head[x];e[cnt].to=y;head[x]=cnt;
}
void getrt(int x,int fa)
{
s[x]=;f[x]=;
for(int i=head[x];i;i=e[i].nex)
{
int y=e[i].to;
if(y==fa||v[y])continue;
getrt(y,x);
f[x]=max(f[x],s[y]);
s[x]+=s[y];
}
f[x]=max(f[x],maxn-s[x]);
if(f[x]<f[rt])rt=x;
}
void calc(int x,int fa)
{
if(dis[x]<=k)ans=min(ans,t[k-dis[x]]+d[x]);
for(int i=head[x];i;i=e[i].nex)
{
int y=e[i].to;
if(v[y]||y==fa)continue;
dis[y]=dis[x]+e[i].w;
d[y]=d[x]+;
calc(y,x);
}
}
void update(int x,int fa)
{
if(dis[x]<=k)t[dis[x]]=min(t[dis[x]],d[x]),sta[++top]=dis[x];
for(int i=head[x];i;i=e[i].nex)
{
int y=e[i].to;
if(v[y]||y==fa)continue;
update(y,x);
}
}
void work(int x)
{
v[x]=;top=;t[]=;
for(int i=head[x];i;i=e[i].nex)
{
int y=e[i].to;
if(v[y])continue;
dis[y]=e[i].w;d[y]=;
calc(y,x);
update(y,x);
}
for(int i=;i<=top;++i)t[sta[i]]=inf;
for(int i=head[x];i;i=e[i].nex)
{
int y=e[i].to;
if(v[y])continue;
maxn=s[y];rt=;
getrt(y,x);
work(rt);
}
}
int main()
{
scanf("%d%d",&n,&k);
int x,y,w;
for(int i=;i<n;++i)
{
scanf("%d%d%d",&x,&y,&w);
x++;y++;
add(x,y,w);add(y,x,w);
}
memset(t,0x3f,sizeof(t));
maxn=f[]=ans=n;
getrt(,);
work(rt);
if(ans==n)puts("-1");
else printf("%d\n",ans);
return ;
}

BZOJ2599 IOI2011Race的更多相关文章

  1. bzoj1758 [Wc2010]重建计划 & bzoj2599 [IOI2011]Race

    两题都是树分治. 1758这题可以二分答案avgvalue,因为avgvalue=Σv(e)/s,因此二分后只需要判断Σv(e)-s*avgvalue是否大于等于0,若大于等于0则调整二分下界,否则调 ...

  2. 【BZOJ2599】Race(点分治)

    [BZOJ2599]Race(点分治) 题面 BZOJ权限题,洛谷 题解 好久没写过点分治了... 在ppl的帮助下终于想起来了 orz ppl 首先回忆一下怎么求有没有正好是\(K\)的路径 维护一 ...

  3. bzoj千题计划160:bzoj2599: [IOI2011]Race

    http://www.lydsy.com/JudgeOnline/problem.php?id=2599 点分治 mi[i] 记录边权和为i时的最少边数 先更新答案,再更新mi数组,换根时清空mi # ...

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

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

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

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

  6. [bzoj2599][IOI2011]Race_树上点分治

    Race bzoj-2599 题目大意:询问一颗树上最短的.长度为k的链,边有边权,n个节点. 注释:$1\le n \le 2\cdot 10^5$,$1\le k \le 10^6$. 想法:树上 ...

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

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

  8. 【BZOJ-2599】Race 点分治

    2599: [IOI2011]Race Time Limit: 70 Sec  Memory Limit: 128 MBSubmit: 2590  Solved: 769[Submit][Status ...

  9. BZOJ2599 [IOI2011]Race

    传送门 点分治,黄学长的选根方法会T掉,换了这个人的选根方法就可以了. 当然,你也可以选择黄学长的奇淫优化 //BZOJ 2599 //by Cydiater //2016.9.23 #include ...

随机推荐

  1. CALayer---iOS-Apple苹果官方文档翻译之CALayer

    CHENYILONG Blog CALayer---iOS-Apple苹果官方文档翻译之CALayer CALayer /*技术博客http://www.cnblogs.com/ChenYilong/ ...

  2. Findbugs插件安装与使用

    FindBugs 是由马里兰大学提供的一款开源 Java静态代码分析工具.FindBugs通过检查类文件或 JAR文件,将字节码与一组缺陷模式进行对比从而发现代码缺陷,完成静态代码分析.FindBug ...

  3. 【leetcode 简单】第三十二题 买卖股票的最佳时机Ⅱ

    给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必须在再次 ...

  4. 旅游(CSUST省赛选拔赛2+状压dp+最短路)

    题目链接:http://csustacm.com:4803/problem/1016 题目: 思路:状压dp+最短路,比赛的时候有想到状压dp,但是最短路部分写挫了,然后就卡死了,对不起出题人~dis ...

  5. HDU 1045 Fire Net (深搜)

    题目链接 Problem DescriptionSuppose that we have a square city with straight streets. A map of a city is ...

  6. 自定义ISO结构

    流程: 1.OS安装 1.1 网卡配置 1.2 密码 1.3 语言 1.4 时区 1.5 分区 1.6 rpms ... 2.软件安装 2.1 BIC Server 2.2 APP Server 2. ...

  7. 程序调试命令gdb

    锁定线程 set scheduler-locking 1.要使用此命令,先用gcc -g编译程序,如:  $gcc -g test.c -o test  编译test.c源程序,输入此程序的调试版本t ...

  8. [写出来才有价值系列:node.js]node.js 01-介绍及安装

    对于Node.js在百度百科上是这样解释的: Node.js是一个Javascript运行环境(runtime).实际上它是对Google V8引擎进行了封装.V8引 擎执行Javascript的速度 ...

  9. centos7安装lamp

    一.准备工作 1.   下载并安装CentOS7.2,配置好网络环境,确保centos能上网,可以获取到yum源. centos7.2的网络配置: vim /etc/sysconfig/network ...

  10. 10.python3标准库--加密

    ''' 加密可以保护消息安全,以便验证其正确性并保护消息不被截获. python的加密支持包括hashlib和hmac,hashlib使用标准算法生成消息内容签名,hmac则用于验证消息在传输过程中未 ...