NOI2003 逃学的小孩 题解
NOI2003 逃学的小孩 题解
传送门。
题目简述
给定一棵树 T T T,需要选择三个点 A , B , C A,B,C A,B,C,需要从 C C C 走到 A , B A,B A,B 的最远距离。
(第一段题目是在讲剧情吗。。)
前置知识
- 图
- 树
- 树的直径
思路简述
这题在蓝题(提高+ / 省选-)中还是比较水的 ^_^
来看看样例吧
用瞪眼法(——数学老师) 看看,发现 A , B A,B A,B 可以设在 1 1 1 和 4 4 4,然后 C C C 在 2 2 2 或 3 3 3 都无所谓。
那么 4 4 4 是咋来的呢?
(设 C C C 在 2 2 2)
2 → 1 → 4 2\rightarrow 1 \rightarrow4 2→1→4。
由于是最远距离,那么——
树的直径!
而刚好,树的直径就是有两个端点,刚刚好可以一个作为 A A A,一个作为 B B B。
然后 C C C 就是在除了 A , B A,B A,B 的节点,距离 A , B A,B A,B 的最短路径。
那么,直接枚举所有 C C C,取最大值再加上 A → B A\rightarrow B A→B 的距离(直径距离)即可。
代码实现
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=2e5+5;
ll n,m,head[N],cnt_e,u,v,w,top,dis_start[N],dis_stop[N],start,stop,ans,ans2;
struct E{ll from,to,w,pre;
}e[N<<1];
inline void add(ll from,ll to,ll w)//链式前向星
{e[++cnt_e].from=from;e[cnt_e].to=to;e[cnt_e].w=w;e[cnt_e].pre=head[from];head[from]=cnt_e;return;
}
void dfs_d(ll u/*当前节点*/,ll fa/*他爹*/,ll sum/*目前的最长路径*/)//求树的直径
{if(sum>ans)ans=sum,top=u;for(ll i=head[u];i;i=e[i].pre){ll v=e[i].to;if(v==fa) continue;dfs_d(v,u,sum+e[i].w);}return;
}
void dfs_dis_start(int u,int fa)//所有点到某个端点的距离
{for(ll i=head[u];i;i=e[i].pre){ll v=e[i].to;if(v==fa) continue;dis_start[v]=dis_start[u]+e[i].w;dfs_dis_start(v,u);}return;
}
void dfs_dis_stop(int u,int fa)//所有点到另一个端点的距离
{for(ll i=head[u];i;i=e[i].pre){ll v=e[i].to;if(v==fa) continue;dis_stop[v]=dis_stop[u]+e[i].w;dfs_dis_stop(v,u);}return;
}
signed main(){scanf("%lld%lld",&n,&m);for(ll i=1;i<=m;i++){scanf("%lld%lld%lld",&u,&v,&w);add(u,v,w);add(v,u,w);}dfs_d(1,0,0);start=top;ans=0;dfs_d(start,0,0);stop=top;dfs_dis_start(start,0);dfs_dis_stop(stop,0);for(ll i=1;i<=n;i++)//枚举所有可能的Cans2=max(ans2,min(dis_start[i],dis_stop[i]));printf("%lld\n",ans+ans2);//ans:直径距离//ans2:某个点到两个端点的最短距离return 0;
}
小彩蛋
我:不对劲,有问题:
1 ≤ T i ≤ 1 0 9 1\le T_i \le 10^9 1≤Ti≤109
十亿分钟。。。先不说你能不能活到那时候,就算能考试貌似就已经结束了吧。。
相关文章:

NOI2003 逃学的小孩 题解
NOI2003 逃学的小孩 题解 传送门。 题目简述 给定一棵树 T T T,需要选择三个点 A , B , C A,B,C A,B,C,需要从 C C C 走到 A , B A,B A,B 的最远距离。 (第一段题目是在讲剧情吗。。) 前置知识 图树树的直径 思路简…...

硬件服务器操作系统的选择:Linux 还是 Windows?
在这个科技日新月异的时代,云服务器虽然日益普及,但硬件服务器依然是众多云服务和数据中心不可或缺的基石。有趣的是,随着云服务器的兴起,不少工程师竟然未曾亲眼见过实体的硬件服务器。然而,事实是,无论是…...

dataV组件使用——数据更新更新组件
bug 当数据更新只更新一个属性页面不会刷新(this.config1.data arr;) 必须重新赋值整个config 方式一:检测到数据更新重新赋值config this.config1 {data: arr,header: ["所在单位", "人员姓名", "职位", &q…...
solana合约编写
文章目录 solana 合约编写整体思路Cargo.toml配置代码实现在 Solana 智能合约中,定义和管理可能的错误类型自定义一个 Solana 账户结构一个帐户的约束条件什么是bump账号获取指令参数编码基础常用总结format! 格式化字符串Option<String>Vec<u8>编译部署到localne…...

C++调用C#方法(附踩坑点)
C调用C#方法 写在前面效果思路步骤可能的问题 写在后面 写在前面 工作需要用C调用C#写到代码,看来网上写的方法,自己也踩了一些坑,这里总结一下,我只试了CLR的方法。 主要参考了下面几篇博客 C调用C#库简单例程(Lucky…...

开源前端埋点监控插件Web-Tracing
Web-Tracing是一款专为前端项目设计的前端监控插件,它基于JavaScript设计,兼容跨平台使用,并提供了全方位的监控功能。 开源地址:https://gitee.com/junluoyu/web-tracing-analysis 以下是关于Web-Tracing的详细介绍:…...

智慧排水远程监测系统物联网解决方案
智慧排水监测系统是一种集成了现代信息技术、物联网技术、大数据分析及云计算能力的高效城市排水管理解决方案。该系统通过全面、实时地监控城市排水网络的运行状态,旨在预防内涝灾害,优化水资源管理,保障城市安全运行,促进可持续…...
【SVN(Subversion)是一个版本控制系统】
Question SVN所有命令 Answer SVN(Subversion)是一个版本控制系统,用于管理和跟踪文件和目录的更改。以下是一些常用的SVN命令: 检出(Checkout) svn checkout URL从版本库中检出一个工作副本。 更新&am…...

leetcode108.把升序数组转换成二叉搜索树
题目描述 [-10,-3,0,5,9] 转换成如下二叉搜索树: 解题的核心原理是:二叉搜索树的中序遍历结果是一个升序数组,所以根节点的数值,也位于数组的中部。 class Solution {public TreeNode sortedArrayToBST(int[] nums) {return h…...

用QTdesigner制作自己的双目标定软件
目录 1,设计布局软件界面 2,导出界面ui文件为python的.py文件 3,为界面添加对应的功能 4,导出为exe可执行文件 5,运行测试效果 5.1 双击启动 5.2 添加必要的参数 5.3 ,运行结果 效果展示 动手制作双…...
MySQL:基础巩固-DDL
一、对数据库的操作 1.查询所有数据库 SHOW DATABASES;2. 查询当前使用的数据库 SELECT DATABASE();3. 创建数据库 CREATE DATABASE IF NOT EXISTS test DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;4. 删除数据库 DROP DATABASE IF EXISTS test;5. 使用数据库 …...
翻译软件在医学中的应用
翻译软件在医学中的应用非常广泛,主要体现在以下几个方面: 患者沟通:翻译软件可以帮助医务人员与非母语患者进行有效沟通,确保患者能够准确表达自己的症状和需求,也使医生能够清晰地解释治疗方案和用药说明。这对提升…...

政务大数据解决方案(六)
政务大数据解决方案通过建立综合数据平台,将来自各政府部门的异构数据整合并进行深入分析,利用人工智能和机器学习技术实现智能化数据处理与预测,从而提升政府决策的科学性和实时响应能力。方案涵盖数据采集、存储、处理、分析与可视化&#…...
【MATLAB机器人系统工具箱】【manipulatorRRT规划器】属性和方法解析
启用了连接启发式(heuristic)后,双向快速扩展随机树(RRT)算法会在以下情况下忽略 MAXCONNECTIONDISTANCE 的限制:当两棵树(起始树和目标树)之间的节点距离足够接近时,算法…...
MySQL 多表连接(JOIN)
在数据库开发中,多表连接(JOIN)是一个非常重要的技术,它使得我们可以在查询中整合多个表的数据,进而实现更加复杂的数据操作。本文将深入探讨 MySQL 中的多表连接,帮助读者全面理解 JOIN 的基本概念、类型和…...

Opencv学习-直方图比较
由于图像的直方图表示图像像素灰度值的统计特性,因此可以通过两幅图像的直方图特性比较 两幅图像的相似程度。从一定程度上来讲,虽然两幅图像的直方图分布相似不代表两幅图像相似,但是两幅图像相似则两幅图像的直方图分布一定相似。例如&…...
一文入门:正则表达式基础
正则表达式简介 正则表达式(Regular Expression,简称regex或RE)是一种用于匹配字符串中字符组合的模式。它广泛应用于编程语言、文本编辑器和各种工具中,用于执行复杂的字符串搜索和替换任务。 为什么使用正则表达式?…...
深入理解 `@DateTimeFormat` 和 `@JsonFormat` 注解
前言 在Java应用程序中,处理日期和时间是一个常见的需求。无论是从数据库读取还是通过API接收数据,正确的日期和时间格式都是确保应用正确运作的关键因素。本文将深入探讨两个常用的注解——DateTimeFormat和JsonFormat——以及它们如何帮助我们在Sprin…...

微服务架构设计中的常见的10种设计模式
微服务架构设计的概念 微服务架构(Microservices Architecture)是一种用于构建分布式系统的软件设计模式。它将大型应用程序拆分成一组小型、自治的服务,每个服务都运行在其独立的进程中,服务之间通过轻量级的通信机制(…...

stripe Element 如何使用
这里要准备好几个东西: 一个支付成功过后的回调 还有一个下单的接口 一旦进入这个下单界面,就要去调下单的接口的,用 post, 这个 接口你自己写,可以写在后端中,也可以放到 nextjs 的 api 中。 首先说的是这个下单…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...

接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...

Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...

什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...

云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...