IOI2011 Race

IOI 2011 Tropical Gardens Race Ricehub IOI 2011 Tropical Gardens 给定一个N个点M条边的无向图,每条边有一条边权,保证没有孤立点 进行Q次询问,每一次询问给定一个KQK_QKQ​,求符合如下条件的路径的数目 以任意节点为起点 假设沿着边E’进入节点X,与点X相连的边记为 {E} 优先选择 {E} 中边权最小的边 假如边权最小的边是E’ 如果|E|为1,选择E‘ 否则选择边权第二小的边 经过恰好K条边之后到达给定节点P 思路: 首先,给定起点和步数后,路径显然固定 看到分类讨论的条件可以考虑拆点 X表示走最 阅读详情

Description

给一棵有N(1 <= N <= 200000)个结点的树,每条边有权,求一条路径,权值和等于K(1 <= K <= 1000000)且边的数量最小。

Input

第一行两个整数 n, k
第2到n行每行三个整数,表示一条无向边的两端和权值 (注意点的编号从0开始)

Output

输出仅一个整数,表示最小边数量,如果不存在这样的路径,则输出-1

Sample Input

4 3

0 1 1

1 2 2

1 3 4

Sample Output

2

#include<bits/stdc++.h>
using namespace std;
const int Maxn=200005;
struct Edge{
	int cnt,h[Maxn],w[Maxn*2],to[Maxn*2],next[Maxn*2];
	inline void add(int x,int y,int z){
		next[++cnt]=h[x];to[cnt]=y;w[cnt]=z;h[x]=cnt;
	}
}e;
struct Node{
	int v,num;
	bool operator <(const Node&A) const {
		return v<A.v||v==A.v&&num<A.num;
	}
}q[Maxn];set<Node>s;
#define to e.to[p]
int cnt,ans=1<<30;
int tmpsiz[Maxn];
bool vst[Maxn];
inline void stat(int x,int fa,int num,int dist){
	q[++cnt]=(Node){dist,num};
	for(int p=e.h[x];p;p=e.next[p])
		if(!vst[to]&&(to^fa))stat(to,x,num+1,dist+e.w[p]);
}
inline void work(int x,int goal){
	s.clear();
	for(int p=e.h[x];p;p=e.next[p])if(!vst[to]){
		cnt=0;stat(to,x,1,e.w[p]);
		for(int i=1;i<=cnt;++i){
			Node nd=*s.lower_bound((Node){goal-q[i].v,0});
			if(nd.v+q[i].v==goal&&s.count(nd))ans=min(ans,nd.num+q[i].num);
		}
		for(int i=1;i<=cnt;++i)s.insert(q[i]);
	}
	Node nd=*s.lower_bound((Node){goal,0});
	if(nd.v==goal&&s.count(nd))ans=min(ans,nd.num);
}
inline void getroot(int x,int fa,int &mn,int &root,int totsiz){
	tmpsiz[x]=1;int maxsiz=0;
	for(int p=e.h[x];p;p=e.next[p])if(!vst[to]&&(to^fa)){
		getroot(to,x,mn,root,totsiz);
		tmpsiz[x]+=tmpsiz[to];
		maxsiz=max(maxsiz,tmpsiz[to]);
	}
	maxsiz=max(maxsiz,totsiz-tmpsiz[x]);
	if(maxsiz<mn)mn=maxsiz,root=x;
}
inline void Divide(int x,int goal,int totsiz){
	int mn=1<<30,root=x;
	getroot(x,0,mn,root,totsiz);
	work(root,goal);
	vst[root]=1;
	for(int p=e.h[root];p;p=e.next[p])
		if(!vst[to])Divide(to,goal,tmpsiz[to]);
}
int main(){
	int n,k;scanf("%d%d",&n,&k);
	for(int i=1;i<n;++i){
		int x,y,z;scanf("%d%d%d",&x,&y,&z);
		e.add(x+1,y+1,z),e.add(y+1,x+1,z);
	}
	Divide(1,k,n);
	printf("%d\n",ans==1<<30?-1:ans);
	return 0;
}

 

IOI2011 Race 测试数据 IOI2011 Race的测试数据,数据有四个文件夹,所有输出数据全是"Correct"。每个输入数据最后一个值才是当前数据的答案。 立即下载

相关推荐

SKF SimPro Quick 4.8.1发布

发布说明可以在SimPro手册的SKF SimPro Quick应用程序的一般部分下找到(帮助→SKF SimPro快速手册→一般→发布说明)。请删除旧版本,请备份您存储在C:\SKF SimPro xxx\files文件夹中的文件以及所有自定义报告模板和表格。我们很高兴地通知您,我们的轴承应用工程软件SKF SimPro Quick 4.8.1可供下载。将新的安装文件下载到本地计算机后,双击它安装向导将打开(按照说明操作)3.安装后,在本地机器上启动SKF SimPro Expert软件。

小韩的博客 1818

从ModuleNotFoundError到成功运行:一个TensorFlow小白的完整排错日记(含代码片段)

本文记录了从遇到ModuleNotFoundError到成功运行TensorFlow的完整排错过程,详细介绍了Python虚拟环境配置、TensorFlow版本选择、IDE设置及跨平台注意事项。通过实战案例帮助初学者快速解决环境配置问题,掌握深度学习开发的基础技能。

weixin_30920597的博客 444

PX4笔记系列(二)vtol_att_control中的tiltrotor解析

update_vtol_state() 注释:采用两段切换的简单逻辑来进行过渡 当切换过渡开关后,飞机将会开始倾转动力,逐渐加速,当飞机获得足够速度后动力将会完全打到向前的位置。对于过渡返回阶段动力则是简单地倾转回来。 如果(不在向前过渡指令下): 当前vtol飞行模式: 1、旋翼模式 无操作 2、固定翼模式 令vtol飞行模式切换到过渡返回模式 3、P1过渡模式 进入过渡失败安全返回至旋翼模式 4、P2过渡模式 进入过渡失败安全返回至旋翼模式 5、过渡返回模式 记录过渡返回时间=当前时间-过渡开始

hypersonicss的博客 1878

[IOI2011]Race

题目链接:点这里 Solution: 点分治,算出点对之间的距离,记录所属子树和与跟之间的边数。 对于每个点,记录排序过后位置离自己最近的不同子树的点,记做go[x] 每次二分去更新,若遇到同一子树的点,则尝试用go[x]去更新 排序以距离为第一关键字,边数为第二关键字(这样二分出来的点一定是满足条件的最优的点) 详见代码(注意编号从0开始) Code: #include<bits/stdc...

weixin_33947521的博客 132

手把手教你设计MTBF加速寿命试验:从阿伦尼斯模型到卡方计算(含Excel模板)

本文详细介绍了如何设计MTBF加速寿命试验,从阿伦尼斯模型到卡方计算,帮助工程师在合理时间内获得准确的MTBF数据。通过工业电源模块的实例演示,涵盖活化能确定、温度应力设计、样本量计算及数据记录规范,并提供Excel模板实现自动化计算,显著提升测试效率。

weixin_42563415的博客 539

Hypack 应用于地形测量的高级设置操作要领

Hypack 是业界公认最好的水文导航测量软件,是目前世界上应用广泛的专业测量疏浚软件。它能够接收,处理,存储和输出各种数据。Hypack支持绝大部分GPS,测深仪(国内如海鹰HY1603单波束测沙仪),多波束测深仪,旁扫声纳,涌浪补偿器,水位仪,验潮仪以及声速剖面仪。利用 Hypack 可以进行导航,单波束测量,多波束测量,旁扫测量以及疏浚实时监测等。软件界面友好,使用方便。本文简要阐述Hypack 应用于地形测量的几个重要操作要领。

中游鱼的博客 2793

2599: [IOI2011]Race (点分治)

#include #include #define inf 1000000000 using namespace std; inline int read(){ int x=0,f=1;char ch=getchar(); while(ch'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+c

1102

Procedural modeling

What is procedural modeling? One content generation option is modeling buildings, plants, clouds, cities, and worlds using an underlying system of rules. 1 Procedural Modeling: Grammars A rule-based generative system loosely organized as: ...

qq_24505417的博客 711

bzoj2599【IOI2011】Race

树的点分治

AaronPolaris 2323

内存泄漏系列专题分析之二十三:meminfo无法统计到的黑洞内存泄漏分析

内存泄漏系列专题分析之二十三:meminfo无法统计到的黑洞内存泄漏分析

683

微信小程序 - 详细实现可移动悬浮按钮,全屏悬浮元素图标可拖动拖拽并自动吸附边缘,微信小程序实现悬浮球吸附边缘+计算靠边靠拢效果(详细代码,拖拽中途放手,靠左就自动跑到屏幕左侧,反之靠右跑到屏幕右侧)

微信小程序,vue2,vue3,微信小程序悬浮功能小按钮,自动吸附边缘效果,微信小程序之可拖动悬浮按钮的实现,如何实现靠近边缘自动吸住功能,小程序右下角的悬浮效果,实现可拖动悬浮图标,自动向两边靠拢,悬浮按钮的实现,微信小程序悬浮球效果,微信小程序(可拖动悬浮按钮)当靠近屏幕边缘时会磁吸靠近,如何实现全局悬浮按钮,悬浮球判断吸附在左右,全屏悬浮能拖着走,小程序怎么做悬浮图标靠近左右两侧能吸附住,悬浮菜单按钮,悬浮球可拖拽,全局悬浮球,全局悬浮框,实现悬浮按钮可拖动,自动吸附边缘效果,若按钮此时位于页面中间偏

🏆 前端领域优质创作者 1万+

P4149 [IOI2011]Race

P4149 [IOI2011]Race 淀粉质点分治 处理书上路径,非常套路 (dsu on tree写挂了改不过来....) #include<cstdio> #include<cstring> inline int Min(int a,int b){return a<b?a:b;} inline int Max(int a,int b)...

dingqiongliang0363的博客 207

Unreal Engine Profiler:动画系统性能分析教程_2024-07-23_03-05-38.Tex

Unreal Engine Profiler 是一个内置的性能分析工具,它可以帮助开发者识别和解决游戏中的性能瓶颈。Profiler 提供了详细的性能数据,包括 CPU 使用率、GPU 负载、内存使用情况等,特别针对动画系统,可以查看动画蓝图的执行时间、骨骼动画的计算成本、以及动画混合和重定向的效率。通过这些数据,开发者可以定位到具体的问题,比如哪些动画状态消耗了过多的 CPU 时间,或者哪些动画资源导致了内存泄漏。

825

Luogu4149 [IOI2011]Race

Luogu4149 [IOI2011]Race 真真正正的淀粉质模板题。 为什么?之前那个O(N^2)检验子树的算法对于菊花图就很呵呵。 这个题,难点在于对子树的统计。 我们无法使用容斥一类的思想。 但是我们可以使用一种其他的方法。 也就是利用其中一颗的子树与其他子树的信息进行统计答案。 这样的话,就可以保证同一个子树内的信息不会被统计多次。 桶 #include <iostream>...

weixin_33796177的博客 166

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

BZOJ2599 [IOI2011]Race

BZOJ2599 [IOI2011]Race 题目描述 传送门好像权限题。。。。 传送门 题目分析 思考一下这个题想让你干什么,无非是一个限制和一个最优求解问题。 经过谨慎思考,发现这个\(k\)好像很小啊,好像开数组就开的下。。。 考虑直接开数组暴力记录。 然后就可以点分治,开个数组\(tmp\)暴力记录当权是\(dis\)时,最近的距离是多少。明显\(ans=min(ans,tmp[k-di...

weixin_30525825的博客 117

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

bzoj2599: [IOI2011]Race

2599: [IOI2011]Race Time Limit: 70 Sec  Memory Limit: 128 MB Submit: 2933  Solved: 855 [Submit][Status][Discuss] Description 给一棵树,每条边有权.求一条简单路径,权值和等于K,且边的数量最小.N Input 第一行 两个整数 n, k 第二

lethalboy 428

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

[FROM WOJ]#3968 [IOI2011] Race

#3968 [IOI2011] Race 题面 给一棵树,每条边有权.求一条路径,权值和等于K,且边的数量最小. 输入 第一行 两个整数 n, k 第二…n行 每行三个整数 表示一条无向边的两端和权值 (注意点的编号从0开始) 输出 一个整数 表示最小边数量 如果不存在这样的路径 输出-1 样例输入 4 3 0 1 1 1 2 2 1 3 4 样例输出 2 数据规模 n≤2e5,k≤1e6n≤2e...

Park Corsa's 优快云 Blog 282

[IOI2011]Race $O(nlog^{2}n)$ 做法

[IOI2011]Race $O(nlog^{2}n)$ 做法 Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) #define maxn 500000 #define inf 0x7f7f7f using namespace ...

EM LGH 154

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

【BZOJ2599】[IOI2011]Race Description 给一棵树,每条边有权.求一条简单路径,权值和等于K,且边的数量最小.N <= 200000, K <= 1000000 Input 第一行 两个整数 n, k第二..n行 每行三个整数 表示一条无向边的两端和权值 (注意点的编号从0开始) Output 一个整数 表示最...

aodanchui1057的博客 117

2599: [IOI2011]Race

2599: [IOI2011]Race 链接 分析   被memset卡。。。   点分治,对于重心,遍历子树,记录一个数组T[i],表示以重心为起点的长度为i的路径中最少的边数是多少。然后先遍历子树,更新答案,然后在遍历一边更新T,防止出现两个起点在同一棵子树中的情况。 代码 1 #include<cstdio> 2 #include<algor...

weixin_30568715的博客 101

bzoj 2599 [IOI2011]Race

点分治

我要吃熊猫 296
上一篇: 洛谷P3806/BSOJ1113(点分治)
下一篇: 与众不同 RMQ——ST表的运用
DancingZ
博客等级 码龄9年 10粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值