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

【BZOJ1999】【NOIP2007】树网的核 单调队列优化DP 题目描述  题目很长,大家自己去看吧。  bzoj  vijos  原题n≤300n\leq 300  加强版n≤500000n\leq 500000题解  这种东西当然要猜结论的啦,否则会比较麻烦。结论1:如果有很多条直径,那么不管核在哪条直径上,最小偏心距都相同。结论2 :任意一条路径的偏心距不会小于核的最小偏心距。  这两个结论的证明方法类似。都是考虑两条路径的公共部分和非公共部分。如果最远的 阅读详情

题目:BZOJ1999.
题目大意:定义一条路径到一个点的距离为一条路径中距离这个点最近的一个点到这个点的距离,一条路径的偏心距为一个距离这条路径最远的点到这条路径的距离.给定一棵 n n n个点的树,求在这棵树的一条直径上的两个点连成一条路径 F F F,使得 F F F的长度不超过 s s s且偏心距最短,输出这个最短的偏心距.
1 ≤ n ≤ 5 ∗ 1 0 5 , 0 ≤ s &lt; 2 31 1\leq n\leq 5*10^5,0\leq s&lt;2^{31} 1≤n≤5∗105,0≤s<231, 0 ≤ 0\leq 0≤所有权值 &lt; 500 &lt;500 <500.

首先根据题目,我们先把直径跑出来,先预处理出直径上每一个点不经过直径上的点可以到达最远的点的距离 d i s [ i ] dis[i] dis[i],容易发现此时直径的偏心距就是 d i s [ i ] dis[i] dis[i]中最大的.

然后把直径列成一条链,把第 i i i个点不经过直径上 i i i后面的点可以到达最远的点的距离 p d [ i ] pd[i] pd[i]和不经过 i i i前面点的最远距离 s d [ i ] sd[i] sd[i]求出来.

之后考虑用双指针枚举路径 F F F对应在直径上的区间 [ l , r ] [l,r] [l,r],枚举左端点 l l l的时候让 r r r尽量大(显然这样更优),然后取 p d [ l ] , max ⁡ i = l + 1 r − 1 { d i s [ i ] } , s d [ r ] pd[l],\max_{i=l+1}^{r-1}\{dis[i]\},sd[r] pd[l],maxi=l+1r−1​{dis[i]},sd[r]中的最大值就是当前路径 F F F的偏心距,用单调队列即可维护.

不过事实上没什么必要,因为很显然 d i s [ i ] ≤ p d [ i ] dis[i]\leq pd[i] dis[i]≤pd[i],所以我们只需要存一个变量就可以得到 p d [ l ] , max ⁡ i = l + 1 r − 1 { d i s [ i ] } pd[l],\max_{i=l+1}^{r-1}\{dis[i]\} pd[l],maxi=l+1r−1​{dis[i]}的最大值了.

时间复杂度 O ( n ) O(n) O(n).

代码如下:

#include<bits/stdc++.h>
using namespace std;

#define Abigail inline void
typedef long long LL;

const int N=500000,INF=(1<<30)-1;

int n,m;
struct side{
  int y,next,v;
}e[N*2+9];
int lin[N+9],cs;

void Ins(int x,int y,int v){e[++cs].y=y;e[cs].v=v;e[cs].next=lin[x];lin[x]=cs;}
void Ins2(int x,int y,int v){Ins(x,y,v);Ins(y,x,v);}

int dp[N+9][2],pre[N+9][2];

void Update(int k,int id){
  int v=dp[e[id].y][0]+e[id].v;
  if (v>dp[k][0]){
  	dp[k][1]=dp[k][0];pre[k][1]=pre[k][0];
  	dp[k][0]=v;pre[k][0]=id;
  }else if (v>dp[k][1]) dp[k][1]=v,pre[k][1]=id;
}

void Dfs_dp(int k,int fa){
  dp[k][0]=0;dp[k][1]=-INF;
  for (int i=lin[k];i;i=e[i].next)
    if (e[i].y^fa){
      Dfs_dp(e[i].y,k);
      Update(k,i);
    }
}

int dia[N+9],v[N+9],cd;

void Get_dia(){
  Dfs_dp(1,0);
  int mx=1;
  for (int i=1;i<=n;++i)
    if (dp[i][0]+dp[i][1]>dp[mx][0]+dp[mx][1]) mx=i;
  int k=mx;
  for (;k;k=e[pre[k][0]].y) dia[++cd]=k,v[cd]=e[pre[k][0]].v;
  reverse(dia+1,dia+cd+1);
  reverse(v+1,v+cd+1);
  v[cd+1]=e[pre[mx][1]].v;
  for (k=e[pre[mx][1]].y;k;k=e[pre[k][0]].y) dia[++cd]=k,v[cd+1]=e[pre[k][0]].v;
}

int dis[N+9],vis[N+9];

void Dfs_dis(int k,int id,int vd){
  vis[k]=1;
  dis[id]=max(dis[id],vd);
  for (int i=lin[k];i;i=e[i].next)
    if (!vis[e[i].y]) Dfs_dis(e[i].y,id,vd+e[i].v);
}

int pd[N+9],sd[N+9];

void Get_dis(){
  for (int i=1;i<=cd;++i) vis[dia[i]]=1,dis[i]=0;
  for (int i=1;i<=cd;++i){
    Dfs_dis(dia[i],i,0);
    pd[i]=max(dis[i],pd[i-1]+v[i]);
  }
  for (int i=cd;i>=1;--i) sd[i]=max(sd[i],sd[i+1]+v[i+1]);
}

int ans;

void Get_ans(){
  int l=0,r=0,sum=0,now=0;
  ans=INF;
  for (;l<cd;){
    sum-=v[++l];now=max(now,pd[l]);
    for (;r<cd&&sum<=m-v[r+1];++r) sum+=v[r+1],now=max(now,dis[r]);
	ans=min(ans,max(now,sd[r]));
  }
}

Abigail into(){
  scanf("%d%d",&n,&m);
  for (int i=1;i<n;++i){
  	int x,y,v;
  	scanf("%d%d%d",&x,&y,&v);
  	Ins2(x,y,v);
  }
}

Abigail work(){
  Get_dia();
  Get_dis();
  Get_ans();
}

Abigail outo(){
  printf("%d\n",ans);
}

int main(){
  into();
  work();
  outo();
  return 0;
}
【机器学习入门】1.4 吃透这些基本术语,才算真正入门 本文通过"挑西瓜"的生活案例,形象解释了机器学习的基本术语。样本对应单个西瓜,特征如色泽、根蒂等是观察维度,特征值是其具体表现,标签是西瓜的好坏判断。数据集是样本集合,特征向量是样本的数学表达,特征空间是所有可能的样本组合。文章强调数据集需划分为训练集、验证集和测试集,以评估模型的泛化能力。最后整理了术语对照表,并解答了常见问题。这些基础概念是理解机器学习的关键,建议读者重点掌握。 阅读详情

相关推荐

从零开始:kohya_ss环境部署与LoRA/SDXL模型训练实战指南

本文提供了一份详细的kohya_ss环境部署与模型训练实战指南。从零开始,手把手教你使用Conda创建虚拟环境、安装依赖并启动Web GUI界面。核心内容涵盖高质量数据集的准备方法,并重点解析了如何使用kohya_ss工具进行LoRA模型和SDXL模型的微调训练,包括关键参数配置与常见报错解决方案,帮助初学者快速上手AI绘画模型定制。

weixin_29162439的博客 534

洛谷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

JeecgBoot漏洞利用工具解析:一键getshell原理与安全加固实践

在应用安全领域,远程代码执行(RCE)和文件上传漏洞是Web系统面临的高危威胁,其核心原理在于对用户输入的控制不足或安全校验缺失。攻击者通过构造恶意请求,可绕过系统边界,在服务器上执行任意命令或上传恶意文件,从而获取系统控制权。这类漏洞的技术价值在于揭示了应用层安全防护的薄弱环节,其利用方式自动化、集成化趋势明显,极大地提升了攻击效率。在低代码开发平台等快速构建的业务系统中,此类风险尤为突出。应用场景广泛覆盖安全测试、渗透评估与应急响应。本文聚焦于JeecgBoot平台的历史高危漏洞,深入解析其SQL注入、

weixin_30787531的博客 551

洛谷 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

普中科技ESP8266-01s模块CWJAP:3 FAIL报错?手把手教你用AT+CWSAP指令搞定WiFi配置

本文详细解析了普中科技ESP8266-01s模块常见的CWJAP:3 FAIL报错问题,并提供了通过AT+CWSAP指令正确配置WiFi的实战解决方案。文章涵盖错误根源分析、硬件连接指南、AT指令详解及高级调试技巧,帮助开发者快速解决ESP8266-01s模块的WiFi配置难题。

weixin_42653691的博客 201

OCR开发车架号识别vin码识别系统

一、vin码识别车架号识别系统简介   vin码识别车架号识别系统,结合VIN码主机厂数据库及自身多年文字识别经验,针对机动车配置参数等信息的查询及采集业务推出的一款VIN码自动识别产品。   车架号识别vin码识别,主要应用在智能手机IOS与Android两个平台中。前端扫描查询模式,无需联网,只需扫描汽车前挡风玻璃右下角的VIN玛(车架号),即可轻松识别出车辆产地、品牌、车

OCR13512721355的博客 1433

bzoj1999

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

allia990718的博客 191

YOLOv5轻量化实战:从Ghost模块到工业级部署的完整指南

本文详细介绍了YOLOv5轻量化实战,重点解析了Ghost模块在工业检测中的应用及其优化策略。通过Ghost卷积技术,模型参数量和GFLOPs显著降低,同时保持高精度,适用于实时性要求严格的工业场景。文章还提供了从模型优化到TensorRT加速的完整部署指南,助力开发者实现高效工业级应用。

weixin_28223453的博客 487

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

ASPICE学习笔记

ASPICE的全称是Automotive SPICE。

汽车电子软件领域知识分享 1355

OpenLayers6入门,快速搭建Vue+OpenLayers地图脚手架项目

本章针对Vue初学者,对Vue不熟悉,甚至还不会Vue的入门学生读者。本章会详细讲解从环境到环境的各个步骤,再到使用脚手架快速生成项目,以及添加地图库依赖,编写简单的高德地图显示页面的。如果已有VUE项目或者熟悉VUE的读者可以不用看本章,直接添加ol依赖到VUE项目中即可。

GIS技术方向,GIS地图技术分享(GIS入门、Openlayers教程、Leaflet教程),做最好的GIS地图开发教程。关注博主公众号:eguid 5440

BZOJ1999(Noip2007)[Core树网的核]--最长链+DFS大法

bzoj1999

Greninja的博客 1247

机器学习势能(MLPs) 第一章 基础理论与核心概念 第二章 数据生成与训练集构建

密度泛函理论(DFT)作为现代计算材料科学的基石,通过求解Kohn-Sham方程在电子结构层面提供可靠的势能面信息。然而,其计算复杂度随体系电子数呈O(N3) 至O(N4) 增长,对于包含数百个原子的体系,单点计算往往需消耗数小时至数天的计算资源。这一瓶颈严重限制了分子动力学模拟的时间尺度,传统DFT-MD通常仅能覆盖皮秒量级,远不足以观测扩散、相变等慢动力学过程。经验力场通过解析函数形式描述原子间相互作用,实现了经典力学的计算效率,但其参数化过程高度依赖物理直觉与经验调参。

VectorShift的博客 181

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

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

温度PID控制PLC程序

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

BZOJ1999树网的核

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

Slr2002的博客 349

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

bzoj1999 [Noip2007]Core树网的核(树的直径+单调队列+贪心)

加强版,n变成了500000.本来的瞎搞法就gg了 怎么办呢?我们需要更高明的瞎搞(逃 首先我们知道两条性质: (1)对于树中的任意一点,距离其最远的点一定是树的直径的某一端点。(2)所有的直径是等价的,即任意一条直径所能求出的最小偏心距相等。于是我们两遍dfs先求出任意一条直径,并记录下来。堵上直径上的所有点,从直径上的每一个点出发遍历他能到达的点,求出不经过直径距它最远的点的距离,记作mx

Icefox的博客 464

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

bzoj 1999 分类: bzoj noip...

树网的核 加强版,好题~ 可以证明,如果存在多条直径,选取任意一条直径都是等价的。 证明: 如图,考虑两条直径 AB, CD,其中它们的重合部分为 EF A B \ / \ ...

aa288288的博客 177

[BZOJ1999] 树网的核 [数据加强版] (树的直径)

[BZOJ1999] 树网的核 [数据加强版] (树的直径) 传送门 如果只是想验证算法正确性这里是洛谷数据未加强版 Description 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边带有正整数的权,我们称T为树网(treenetwork),其中V, E分别表示结点与边的集合,W表示各边长度的集合,并设T有n个结点。...

Tricksterism 318

NOIP2007/BZOJ1999 字串变换【题解】

描述 已知有两个字串 AA,BB 及一组字串变换的规则(至多6个规则): ·A1 -&amp;gt; B1 ·A2 -&amp;gt; B2 规则的含义为:在 AA中的子串 A1A1 可以变换为 B1B1、A2A2 可以变换为 B2B2 …。 例如:A=’abcd’ B=’xyz’ 变换规则为: ‘abc’-&amp;gt;‘xu’ ‘ud’-&amp;gt;‘y’ ‘y’-&amp;gt;‘yz’ 则此时,AA 可以经...

zjh_2017的博客 494

【题解】洛谷P1099(同bzoj1999)[NOIP2007T4]树网的核 树的直径

题目链接 题目描述 设T=(V,E,W)T=(V,E,W)T=(V,E,W)是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称TTT为树网(treebetwork),其中VVV,EEE分别表示结点与边的集合,WWW表示各边长度的集合,并设TTT有nnn个结点。 路径:树网中任何两结点aaa,bbb都存在唯一的一条简单路径,用d(a,b)d(a, b)d(a,b)表示以a,ba,...

翻过这座山,他们就会听到你的故事 499

BZOJ 1999 树网的核(加强版)

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

aimifeng9177的博客 189

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

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

雯舞 744

【BZOJ1999】树网的核,求树的直径+单调队列乱搞

学了博弈还是不会怎么办

xiaoyimi的博客 1171

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

BZOJ1999 树网的核

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

baichuan9723的博客 187

bzoj千题计划134:bzoj3124: [Sdoi2013]直径

http://www.lydsy.com/JudgeOnline/problem.php?id=3124 第一问: dfs1、dfs2 dfs2中记录dis[i]表示点i距离最长链左端点的距离 第二问: 所有直径的交集一定是最长链上连续的一段 dfs3记录最长链, 从最长链上每个点i开始dfs4,记录能到达的非最长链点的最远距离mx 如果mx==最长链-dis[i],更新交集...

weixin_30925411的博客 170
上一篇: 数据结构合并算法入门(BZOJ4719 天天爱跑步题解)
下一篇: 蓝书(算法竞赛进阶指南)刷题记录——【SDOI2013】BZOJ3124 直径题解(树的直径)
hezlik
博客等级 码龄9年 111粉丝 241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值