BZOJ1999树网的核

抖音小游戏(IAA)巨量引擎投放指南 摘要:本文详细介绍了在巨量引擎平台投放小游戏广告的完整流程,包括五个关键步骤:1)添加小游戏资产,填写ID等信息并等待审核;2)添加事件管理,配置激活和关键行为事件;3)通过橙子建站创建落地页,设置跳转链接;4)新建广告项目,选择小程序推广目标;5)完成广告创建。 阅读详情

题目描述

设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边带有正整数的权,我们称T为树网(treenetwork),其中V, E分别表示结点与边的集合,W表示各边长度的集合,并设T有n个结点。路径:树网中任何两结点a,b都存在唯一的一条简单路径,用d(a,b)表示以a,b为端点的路径的长度,它是该路径上各边长度之和。我们称d(a,b)为a,b两结点间的距离。一点v到一条路径P的距离为该点与P上的最近的结点的距离: d(v,P)=min{d(v,u),u为路径P上的结点}。树网的直径:树网中最长的路径称为树网的直径。对于给定的树网T,直径不一定是唯一的,但可以证明:各直径的中点(不一定恰好是某个结点,可能在某条边的内部)是唯一的,我们称该点为树网的中心。偏心距ECC(F):树网T中距路径F最远的结点到路径F的距离,即。 任务:对于给定的树网T=(V,E,W)和非负整数s,求一个路径F,它是某直径上的一段路径(该路径两端均为树网中的结点),其长度不超过s(可以等于s),使偏心距ECC(F)最小。我们称这个路径为树网T=(V,E,W)的核(Core)。必要时,F可以退化为某个结点。一般来说,在上述定义下,核不一定只有一个,但最小偏心距是唯一的。下面的图给出了树网的一个实例。图中,A-B与A-C是两条直径,长度均为20。点W是树网的中心,EF边的长度为5。如果指定s=11,则树网的核为路径DEFG(也可以取为路径DEF),偏心距为8。如果指定s=0(或s=1、s=2),则树网的核为结点F,偏心距为12。

提示

对于70%的数据,n<=200000

对于100%的数据:n<=500000, s<2^31, 所有权值<500

解析:这个题的数据如果和noip一样小就怎么写都行了,然而500000的数据只能考略O(n)或O(logn)的复杂度。分析这道题可以得到这样一个性质:根据直径最长性,如果一点与直径的连线的交点在F外,那么这个点与F的距离一定不是偏心距。有了这个性质,这道题就可以以O(n)的复杂度用单调队列做出来了。

代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
deque<int>q;
struct point
{
	int to;
	int next;
	int dis;
}e[1000010];
int n,x,y,z,res=100000010,maxn,s,t,num,ss;
int d[500001],head[500001],f[500001],pre[500001];
bool vis[500001];
void add(int from,int to,int dis)
{
	e[++num].next=head[from];
	e[num].to=to;
	e[num].dis=dis;
	head[from]=num;
}
void dfs(int x)
{
	vis[x]=true;
	for(int i=head[x];i!=0;i=e[i].next)
	{
		int to=e[i].to;
		if(!vis[to])
		{
			d[to]=d[x]+e[i].dis;
			dfs(to);
		}
	}
}
void dfs1(int x)
{
	vis[x]=true;
	for(int i=head[x];i!=0;i=e[i].next)
	{
		int to=e[i].to;
		if(!vis[to])
		{
			pre[to]=x;
			d[to]=d[x]+e[i].dis;
			dfs1(to);
		}
	}
}
void find(int x)
{
	vis[x]=true;
	for(int i=head[x];i!=0;i=e[i].next)
	{
		int to=e[i].to;
		if(!vis[to])
		{
			find(to);
			d[x]=max(d[x],d[to]+e[i].dis);
		}
	}
}
void getf()
{
	int slr=0;
	for(int i=t;i!=0;i=pre[i])
	{
		f[i]=slr;
		for(int j=head[i];j!=0;j=e[j].next)
		{
			int to=e[j].to;
			if(pre[i]==to)
			{
				slr+=e[j].dis;
				break;
			}	
		}
	}
}
int main()
{
	scanf("%d%d",&n,&ss);
	for(int i=1;i<=n-1;i++)
	{
		scanf("%d%d%d",&x,&y,&z);
		add(x,y,z);
		add(y,x,z);
	}
	dfs(1);
	for(int i=1;i<=n;i++)
	{
		if(d[i]>maxn)
		{
			maxn=d[i];
			s=i;
		}
	}
	memset(vis,false,sizeof(vis));
	memset(d,0,sizeof(d));
	dfs1(s);
	maxn=0;
	for(int i=1;i<=n;i++)
		if(d[i]>maxn)
		{
			maxn=d[i];
			t=i;
		}
	memset(vis,false,sizeof(vis));
	memset(d,0,sizeof(d));
	for(int i=t;i!=0;i=pre[i])
		vis[i]=true;
	for(int i=t;i!=0;i=pre[i])
		find(i);
	getf();
	int r=t,l=pre[t];
	q.push_front(l);
	if(d[l]<d[r])
		q.push_back(r);
	while(1)
	{
		if(pre[l]!=0&&f[pre[l]]-f[r]<=ss)
		{
			l=pre[l];
			int ans=max(f[r],maxn-f[l]);
			q.push_front(l);
			while(d[q.back()]<d[l])
				q.pop_back();
			ans=max(ans,d[q.back()]);
			res=min(res,ans);
		}
		else if(l!=r)
		{
			if(q.back()==r)
				q.pop_back();
			r=pre[r];
			int ans=max(f[r],maxn-f[l]);
			ans=max(ans,d[q.back()]);
			res=min(res,ans);
		}
		else if(l==r&&pre[l])
		{
			while(!q.empty())
				q.pop_back();
			l=pre[l];
			r=l;
			q.push_front(l);
			int ans=max(f[r],maxn-f[l]);
			ans=max(ans,d[q.back()]);
			res=min(res,ans);
		}
		else
			break;
	}
	printf("%d",res);
	return 0;
}


MTK-Android12开机应用自启需求-自定义原生Launcher3 主界面布局图标 MTK平台 Android12 版本 上实现 开机应用自启需求-自定义原生Launcher3 主界面布局图标。添加一个属性定义即可,如下:这里自定义一个属性目的是为了在加载Launcher3启动时候从属性获取需要自启动应用的包名,可以扩展动态替换 自启动包名。这里有两种方案,要么在Launcher3里面实现,要么在系统服务里面在开机时候启动第三方一次。这里强烈建议在Launcher3中去实现,体验效果更好。// 第一步:定义属性,// 第二步:在onCreate 方法中获取属性并启动应用。 阅读详情

相关推荐

抖音小程序开发 唤起收银台支付(可以选择支付宝APP支付或微信H5支付)

什么都别说,先看效果: 字节跳动也开放了小程序给商家接入,可以在旗下APP如抖音、今日头条、今日头条极速版等应用中即点即用,基于庞大的数亿用户量为其引流,帮助商家获取用户流量,销售商品,其模式和微信小程序差不多。 1、后台管理地址: https://developer.toutiao.com/ 2、开发文档地址: https://developer.toutiao.com/dev/cn/min...

悟空码字的博客 1万+

蓝书(算法竞赛进阶指南)刷题记录——BZOJ1999 树网的核(树的直径)

题目:BZOJ1999. 题目大意:定义一条路径到一个点的距离为一条路径中距离这个点最近的一个点到这个点的距离,一条路径的偏心距为一个距离这条路径距离最远的点到这条路径的距离.给定一棵树,求在这棵树的一条直径上的两个点连成一条路径F,使得F的长度小于s且偏心距最短. 我们首先可以从题目上得出,任意一条直径的最小偏心距相等. 所以我们考虑取出一条直径后,暴力枚举直径上的核的两个端点,将核上的点打上标...

hzk_cpp的博客 387

Windows server 2012R2安装Oracle11g

打开 开始——所有程序——Oracle-OraDb11g_home1——配置和移植工具——Database Configuration Assistant。打开 开始——所有程序——Oracle-OraDb11g_home1——配置和移植工具——Net Configuration Assistant。首先打开Oracle的安装位置找到下面的位置找到tnsnames.ora文件右键编辑。打开Oracle的安装位置找到下面的位置找到tnsnames.ora文件右键编辑。选择仅安装数据库软件。

qq_74770105的博客 3596

洛谷1099 & bzoj1999 树网的核(树的直径)(双指针)

题目 洛谷1099 树网的核bzoj1999 树网的核(加强版) 题解 树的直径 首先要发现一个结论:在任意一条树的直径上求最小偏心距是一样的! 简单证明一下,自己yy吧~ 这样以后就可以乱搞了,O(N^3)暴力也可以过n=300的数据。 直接上O(N)正正解! 随便搞出一条直径来,这些点分别是a1,a2,…,at。在直径上一个点al,会有一个最大的ar,使得dist[ar]-dist[a...

A_Bright_CH的博客 447

蓝牙耳机充电仓——功能框架

数据传输:大部分充电仓会跟耳机通信,控制耳机开机、关机和进入可搜索模式等等。蓝牙耳机给大家的生活带来便利,来讲讲TWS蓝牙耳机的搭档充电仓吧!方便携带:如果耳机单独带着,指定能弄丢一个,有了充电仓就安全多了。收纳保护:把珍爱的耳机放入充电仓里,防止丢失、磕碰、刮花等。给耳机充电:提供电力补给,让耳机持续使用。

改变自己现在能改变的,珍惜自己现在所拥有的 8948

【一起学UniGUI】--UniGUI的部署选项(5)

uniGUI支持Windows平台下所有主要部署选项。 1.Standalone Server (独立服务器) 最简单的部署方法是独立服务器。在这种模式下,应用程序服务器像桌面应用程序一样直接运行。它也是用于调试应用程序的模式。运行应用程序可执行文件后(它是一个EXE文件),它将最小化到托盘图标,并运行到用户手动终止为止。见下图: 一个独立的应用程序可以...

5776

洛谷 1099 ( bzoj 1999 ) [Noip2007]Core树网的核

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1999 《算法竞赛进阶指南》346页。https://www.cnblogs.com/shenben/p/5895325.html 1.用随便一条直径算就行了。   由题知所有直径都有交点。故有公共部分。   如果分叉形状。核选在分叉后的地方,偏心距一定它是到直径的较远端点的距离。不然...

weixin_34115824的博客 140

MIT6.824-lab2D-2022(日志压缩详细讲解)

从paper中去讲解,并实现关于lab2D的代码。

幸平的博客 6035

bzoj1999: [Noip2007]Core树网的核/2282: [Sdoi2011]消防

noip版:洛谷1099 加强版:bzoj1999 双倍经验(与bzoj1999相同):bzoj2282 对于n&lt;=300的,跑一遍floyd,枚举所有在直径上的线段即可 #include&lt;bits/stdc++.h&gt; using namespace std; int n,s,x,y,z,dis[303][303],mx,a[303],b[303],cnt,i,j,k,l...

xumingyang0的博客 287

从SVF文件到高效验证:Formality中set_svf命令的隐藏技巧与实战解析

本文深入解析Formality中set_svf命令的高级应用技巧,涵盖SVF文件生成策略、多文件加载优化及验证效率提升方法。通过-append和-ordered选项的实战应用,帮助工程师解决芯片验证中的常见问题,实现验证通过率与运行效率的双重提升。

mqtt6iot的博客 819

「自然语言驱动生产力」23. 科研神器:DeepSeek+EndNote实现文献智能综述

摘要:传统文献综述面临周期长、漏检率高、数据整合繁琐等痛点,某985课题组数据显示,4人团队完成一篇综述平均需5个月,重要成果遗漏率达25%。本文提出基于DeepSeek+EndNote的智能综述方案,通过“自然语言解析→精准检索→智能筛选→自动生成”四步流程实现全自动化。核心技术包括检索式智能生成算法、文献优先级评分模型、可视化图表自动生成工具及结构化综述框架引擎。实际应用中,文献调研周期从3-6个月缩短至2周,重要成果遗漏率降至3%以下,图表制作时间完全解放。某课题组采用该方案后,1人3周完成的综述被A

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1664

bzoj1999

这道题真的做得头皮发麻 题解。。。lyd书上。。。 头皮发麻 。。。 #include<cstdio> #include<algorithm> #include<cstring> #include<queue> using namespace std; const int maxn=600000+10; c...

allia990718的博客 191

20 硬件工程师笔面试高频考点真题解析——寄存器

摘要: 寄存器是由多个边沿触发的D触发器组成的多位存储单元,用于同步时序电路中的数据暂存、隔离毛刺、跨时钟域同步等。选型需考虑位宽、触发方式(边沿/电平)、异步控制、电气参数等。核心时序参数包括建立时间(Tsu)、保持时间(Thold)和时钟输出延迟(Tco)。寄存器广泛应用于时序逻辑、流水线分割、毛刺消除、跨时钟域同步及计数分频等场景。同步复位依赖时钟边沿,时序易收敛但需时钟支持;异步复位独立于时钟,上电可靠但需注意亚稳态风险。

XU157303764的博客 1342

BZOJ 1999 树网的核(加强版)

BZOJ 1999 树网的核(加强版) 看到八中OJ上面吧NOIP原题的n=300扩大到了n=500000,就研究了一下O(n)的算法。 首先要确定的是如果有好几条直径的话,任意一个上面都会有一个核。 证明的话可以这么想:先考虑有两条直径的情况,因为这是一棵树,所...

aimifeng9177的博客 189

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

BZOJ1999 && noip2007树网的核

1999: [Noip2007]Core树网的核 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1756  Solved: 536 [Submit][Status][Discuss] Description 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边带有正整数的权,我们称T为树网(treenetwork)

hpp__hpp的博客 304

jre9下载 jdk9

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

BZOJ1999 树网的核

题意缩简: 给你一个树上偏心距的定义 让你在某一条直径上找一条长度不超过S的线段使得偏心距最小 树上偏心距:树上离某段线段最远的节点的距离 树上节点到线段的定义:节点离线段上最近点的距离 做题之前 我们先得出一个结论:在任意一条直径上求出的最小偏心距都相等 证明: 如果仅有一条直径 明显成立. 如果有两条及以上的直径的话 因为直径必定相交且中点重合(题目给出 也很任意证明)...

baichuan9723的博客 187

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

BZOJ1999 树网的核[数据加强版]

1999: [Noip2007]Core树网的核 Time Limit:10 SecMemory Limit:64 MBSubmit:1214Solved:336[Submit][Status][Discuss] Description 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边带有正整数的权,我们称T为树网(treenetwork),其中...

weixin_34178244的博客 172

NOIP2007/BZOJ1999 树网的核【题解】

描述 Description 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边带有正整数的权,我们称T为树网(treenetwork),其中V, E分别表示结点与边的集合,W表示各边长度的集合,并设T有n个结点。 路径:树网中任何两结点a,b都存在唯一的一条简单路径,用d(a,b)表示以a,b为端点的路径的长度,它是该路径上各边长度之和。我们称d(a,b)为a,b两结...

zjh_2017的博客 456

BZOJ 1999 [Noip2007]Core树网的核 樹的直徑

$ \rightarrow $ 戳我進BZOJ原題 $ \rightarrow $ 戳我進洛谷原題 树网的核 时空限制 1000ms / 64MB 题目描述 设 $ T=(V,E,W) $ 是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权, 我们称 $ T $ 为树网(treebetwork),其中 $ V, E $ 分别表示结点与边的集合,$ W $ 表示各边长度的集合,...

ayf1988的博客 153

[树的直径] BZOJ 1999 [Noip2007]Core树网的核

做这个题 主要是复习几个性质 对于树中的任意一点,距离其最远的点一定是树的直径的某一端点 所有直径的中心相同,这个中心可以是一个顶点,也可以在一条边上。所有点到他的最远点都要通过这个中心 所有的直径所能求出的该最小偏心距相等 然后我们就直接找出一条直径 在上面two-pointers扫一下就好了 每次我们用 当前区间内不经过直径上的点抵达的其他点的最大深度和到两端的距离的最大值 更新下答案#inc

雯舞 744

[bzoj1999][noip2007]Core树网的核

好久没写题解了。这题不算太水就写一下题解。 话说回来,虽然不水但是挺裸。可以说题意即一半题解了。 我猜粘了题面也没有人去看的,所以直接人话题意了。 给一棵树,点数1e6,(当年noip的n当然是只有300了,,),就管他叫树网。 首先定义树的直径:树上最远点对之间的路径。我们定义树的一个点到一段路径的距离是:点和路径上最近的点之间路径长。 然后定义一段路径的偏心距ecc:除了这...

weixin_30279315的博客 142

BZOJ 1999: [Noip2007]Core树网的核【最长链】

Description设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边带有正整数的权,我们称T为树网(treenetwork),其中V, E分别表示结点与边的集合,W表示各边长度的集合,并设T有n个结点。 路径:树网中任何两结点a,b都存在唯一的一条简单路径,用d(a,b)表示以a,b为端点的路径的长度,它是该路径上各边长度之和。我们称d(a,b)为a,b两结点间的距离。

Sdywolf的博客 423

[BZOJ1999][codevs1167][Noip2007]Core树网的核

[BZOJ1999][codevs1167][Noip2007]Core树网的核 试题描述 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边带有正整数的权,我们称T为树网(treenetwork),其中V, E分别表示结点与边的集合,W表示各边长度的集合,并设T有n个结点。 路径:树网中任何两结点a,b都存在唯一的一条简单路径,用d(a,b)表示以a,b为端点的路...

weixin_30786617的博客 75

[bzoj]1999: [Noip2007]Core树网的核

原题链接:树网的核题目中说了:树的直径不唯一,但是中点唯一。如何证明中点唯一(虽然没有必要)假设一条直径被一个节点分成了左和右两段,我们假设左边小于于右边。现在要保证直径等于len[left]+len[right]。①从节点连出长度等于左段的子树,明显,中点还是在右端②从节点连出长度等于右段的子树,中点位置改变。但是len[left]+len[right]&lt;2*len[right]。直径改变...

qq_30488837的博客 316

洛谷P1099 BZOJ1999 树网的核 [搜索,树的直径]

  洛谷传送门,BZOJ传送门 树网的核 Description 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边带有正整数的权,我们称T为树网(treenetwork),其中V, E分别表示结点与边的集合,W表示各边长度的集合,并设T有n个结点。 路径:树网中任何两结点a,b都存在唯一的一条简单路径,用d(a,b)表示以a,b为端点的路径的长度,它是该路径上各边长...

weixin_30258901的博客 114

BZOJ 1999: [Noip2007]Core树网的核[dfs]

1.对于树中的任意一点,距离其最远的点一定是树的直径的某一端点 2.同一棵树的直径的中点相同(题目里给出来的,虽然不知道怎么用) 3.要求的一定在直径上,并且越长越好(不在直径上的点到端点的距离≥\geq直径上的点到端点的距离,都取较大的那个) 4.任意搞一条直径求出来的偏心距是一样的随意求一条直径,然后抠出来枚举头尾处理一下 当前的这条链到别的点中最长的距离为max(到两端点的距离,到不在

sillyf的博客 314
上一篇: 替罪羊树学习笔记
下一篇: 分块入门
Slr2002
博客等级 码龄9年 3粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值