正题

题目链接:https://www.luogu.com.cn/problem/P4149


题目大意

nnn个点的一棵树,求一条边最少的权值和为kkk的路径。


解题思路

直接点分治,然后用mapmapmap记录每个权值和的最小边数转移即可。
时间复杂度O(nlog⁡2n)O(n\log^2 n)O(nlog2n)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
const int N=2e5+10;
struct node{int to,next,w;
}a[N*2];
int n,k,ls[N],f[N],siz[N],sum,root,ans,tot;
bool v[N];
map<int,int> mp;
void groot(int x,int fa){if(v[x])return;siz[x]=1;f[x]=0;for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(y==fa||v[y])continue;groot(y,x);siz[x]+=siz[y];f[x]=max(f[x],siz[y]);}f[x]=max(f[x],sum-siz[x]);if(f[x]<f[root])root=x;
}
void ret(int x,int fa,int dep,int w){if(v[x])return;if(w>=k)return;if(mp.count(k-w))ans=min(ans,mp[k-w]+dep);for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(y==fa||v[y])continue;ret(y,x,dep+1,w+a[i].w);}return;
}
void dfs(int x,int fa,int dep,int w){if(v[x])return;if(dep>ans||w>k)return;if(w==k){ans=min(ans,dep);return;}if(!mp.count(w))mp[w]=dep;else mp[w]=min(mp[w],dep);for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(y==fa||v[y])continue;dfs(y,x,dep+1,w+a[i].w);}return;
}
void calc(int x){mp.clear(); for(int i=ls[x];i;i=a[i].next){int y=a[i].to;ret(y,x,1,a[i].w);dfs(y,x,1,a[i].w);}return;
}
void solve(int x){v[x]=1;calc(x);for(int i=ls[x];i;i=a[i].next){int y=a[i].to;sum=siz[y];root=n;groot(y,x);solve(root);}
}
void addl(int x,int y,int w){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;a[tot].w=w;return;
}
int main()
{scanf("%d%d",&n,&k);ans=2147483647; for(int i=1;i<n;i++){int x,y,w;scanf("%d%d%d",&x,&y,&w);addl(x,y,w);addl(y,x,w);}sum=root=n;f[n]=2147483647;groot(0,0);solve(root);if(ans==2147483647)printf("-1");else printf("%d",ans);
}

P4149-[IOI2011]Race【点分治】相关推荐

  1. P4149 [IOI2011]Race

    P4149 [IOI2011]Race 题意: 给一棵树,每条边有权.求一条简单路径,权值和等于 k,且边的数量最小. 题解: 用t[i]:长度为i的路径包含的最少边数 按照子树顺序,依次用dep[u ...

  2. [BZOJ2599][IOI2011]Race 点分治

    2599: [IOI2011]Race Time Limit: 70 Sec  Memory Limit: 128 MB Submit: 3934  Solved: 1163 [Submit][Sta ...

  3. 【P4149 [IOI2011]Race】点分治

    P4149 给一棵树,每条边有权.求一条简单路径,权值和等于 K,且边的数量最小. 输入格式 第一行包含两个整数 n, K. 接下来 n - 1 行,每行包含三个整数,表示一条无向边的两端和权值. 注 ...

  4. 【BZOJ】2599: [IOI2011]Race 点分治

    [题意]给一棵树,每条边有权.求一条简单路径,权值和等于K,且边的数量最小.N <= 200000, K <= 1000000.注意点从0开始编号,无解输出-1. [算法]点分治 [题解] ...

  5. BZOJ 2599: [IOI2011]Race 点分治题解

    Time Limit: 70 Sec Memory Limit: 128 MB Submit: 3811 Solved: 1129 Description 给一棵树,每条边有权.求一条简单路径,权值和 ...

  6. bzoj 2599: [IOI2011]Race(树的点分治)

    2599: [IOI2011]Race Time Limit: 70 Sec  Memory Limit: 128 MB Submit: 3862  Solved: 1144 [Submit][Sta ...

  7. 【BZOJ-2599】Race 点分治

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

  8. BZOJ 2599: [IOI2011]Race

    点分治模板 #include<cstdio> #include<algorithm> using namespace std; int cnt,n,K,ans,N,root,F ...

  9. [IOI2011]Race

    题目链接:点这里 Solution: 点分治,算出点对之间的距离,记录所属子树和与跟之间的边数. 对于每个点,记录排序过后位置离自己最近的不同子树的点,记做go[x] 每次二分去更新,若遇到同一子树的 ...

  10. 点分治题单(来自XZY)

    点分治题单(来自XZY) 静态点分治 [x] 洛谷 P3806 [模板]点分治1 [x] 洛谷 P4178 Tree [x] 洛谷 P2634 [国家集训队]聪聪可可 [x] 洛谷 P4149 [IO ...

最新文章

  1. (四十三)java版spring cloud+spring boot+redis多租户社交电子商务平台-eureka集群整合config配置中心...
  2. 选高防服务器要注意哪些方面?——微云网络
  3. Linux下yum命令详解
  4. 每天学一点flash(76)百度MP3音乐APi接口使用
  5. 上海名媛群事件是真实的么?
  6. MVC应用程序JsonResult()的练习
  7. mysql,SQL标准,多表查询中内连接,外连接,自然连接等详解之查询结果集的笛卡尔积的演化...
  8. MySQL数据库主键与外键
  9. cc2530设计性实验代码七
  10. 【锂电】锂电工艺大全
  11. 图的拓补排序(TopologicalSort)算法在邻接表与邻接矩阵结构下实现
  12. 2014.3 USACO月赛T1 Watering the Fields
  13. 基于wine葡萄酒数据集的分类方法研究
  14. C++:Timer类实现
  15. 企业微信之发送应用消息案例
  16. oracle jpg格式导出,格式记RAW,另存或导出就是JPG格式,就这么很简单
  17. 【智慧农业】智慧温室建造流程
  18. python输入个人所得税计算_用python写一个北京市的个税计算器
  19. javaWeb基础---Jsp
  20. from . import *

热门文章

  1. 实现链栈的各种基本运算的算法_LeetCode基础算法题第78篇:如何不用加减号实现两数的加法运算?...
  2. python小甲鱼爬虫妹子_【Python学习日记】B站小甲鱼:爬虫
  3. 女生学高铁和计算机哪个更好,2020铁路最好的5个专业 女生上铁路学什么专业好...
  4. linux怎么搜索特定文件夹,linux如何在特定文件夹中查找特定文件
  5. linux 端口qos,linux的qos机制 - cgroup篇 (2)
  6. 群同态基本定理证明_群论(7): 群代数, 群表示基础
  7. leetcode239. 滑动窗口最大值(思路+详解)
  8. 二叉树序列化与反序列化相关题目(Leetcode题解-Python语言)
  9. android 背景图片居中显示文字,Android ImageSpan 给文字设置圆角背景 并且文字居中,背景居中。...
  10. [SpringBoot2]welcomefavicon