hiho刷题日记——第十一天树中的最长路

国央企创新负责人如何通过平台实现科研成果的快速识别与转化?.docx 科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。 立即下载

题目

给出一个无根树(其实就可以之间看作一个特殊的无向图)
求出该无根树的最长路
样例输入
8
1 2
1 3
1 4
4 5
3 6
6 7
7 8
样例输出
6

思路

对于任意一个节点,将其视为根节点,找到深度最深的节点记录下来。
再将找到的节点作为根节点找出深度最深的节点,两点之间的路便是这无根树的最长路。

原因

假设我们已知了最长路的两个端点。那么将这颗无根树上的任意一个节点作为根节点,找到的深度最深的节点都会是这两个节点中的一个。而将这最长路的端点作为根节点,找到的最深的节点,就会是这最长路的另一个端点。

代码

#include<cstdio>
#include<cstring>
using namespace std;

typedef struct{
    int v,next;
}EDGE; 

EDGE edge[100005<<1];
int head[100005];
int e=0,node=0,ans=0;

inline void addEdge(int v,int u)
{
    edge[e].v=v;
    edge[e].next=head[u];
    head[u]=e++;
}

inline void dfs(int cur,int pre,int d)
{
    if(d>ans)
    {
        ans=d;
        node=cur;
    }

    for(int i=head[cur];i!=-1;i=edge[i].next)
        if(edge[i].v!=pre) dfs(edge[i].v,cur,d+1);
}

int main()
{
    memset(head,-1,sizeof head);
    int N;
    int a,b;
    scanf("%d",&N);
    for(int i=1;i<N;i++)
    {
        scanf("%d%d",&a,&b);
        addEdge(a,b);
        addEdge(b,a);
    }

    dfs(1,0,0);
    dfs(node,0,0);
    printf("%d",ans);

    return 0;
}
PotPlayer自用皮肤 自用 PotPlayer 皮肤,仅微调了字体大小与颜色,是按个人习惯调整,未做适配性调整。 立即下载

相关推荐

Cursor插件安装CodeX保姆级教程:从登录到调整面板布局,一步不落

本文提供Cursor编辑器安装CodeX插件的详细教程,涵盖从登录到调整面板布局的全流程。通过优化界面布局和配置参数,帮助开发者提升编码效率,特别适合需要智能代码补全的编程场景。

weixin_42648844的博客 4751

hiho#1050 : 树中的最长路

1050 : 树中的最长路经典算法。#include<cstdio> #include<algorithm> #include<vector> #include<cstring> using namespace std; int n; const int N=100007; vector<int>ve[N]; int dis[N]; int vis[N];void dfs(int now,int l

neuike的博客 357

企业微信自建应用全流程部署指南:从HTTPS到API调试

本文提供了一份详尽的企业微信自建应用部署指南,涵盖从HTTPS域名配置、Nginx反向代理到企业微信后台应用创建与API调试的全流程。核心在于构建一个符合企业微信安全要求的“可信”服务环境,并利用JupyterLab等工具进行高效调试,帮助企业快速完成内部系统与企业微信的集成。

weixin_29247219的博客 422

【难】【分治法】【树】求树中长度最大的路径

题目:EPI //由于题目的特殊要求,不树的节点需要数据域 //pair的first是孩子节点,second是距离 class TreeNode { public: vector, double>> edges; }; //最大高度和最大直径 pair find_diameter_core(const shared_ptr &root) { if (root->edges.empt

bupt8846的专栏 776

inferCNVpy分析流程学习

inferCNV的用途大家都已经很清楚了,接下来就走一下流程,试一试Python版的inferCNV。使用的数据集为:GSE188711,既往推文可见:Scanpy分析全流程(含harmonypy整合/细胞周期矫正/双细胞检测及去除)(

zfyyzhys的博客 1295

5分钟搞定SNMP工具安装:从Linux到Windows的snmpwalk/snmpget全攻略

本文提供了SNMP工具(snmpwalk/snmpget)在Linux和Windows系统上的快速安装与使用指南,涵盖从基础安装到高阶应用的全面解析。通过详细的命令示例和故障排查技巧,帮助用户快速掌握网络设备监控与诊断的核心技能,提升运维效率。

weixin_29248313的博客 555

hihocoder第十一周树中的最长路

树中,两个相距最远的结点之间的距离。

KangRoger的专栏 1459

霜冰优化算法(RIME)详解:从自然现象到智能优化

霜冰优化算法(RIME)是一种新型元启发式优化算法,灵感源于自然界中霜冰的形成过程。该算法通过模拟软霜和硬霜的不同生长特性,实现了高效的全局探索和局部开发平衡。RIME算法包含三个核心机制:软霜搜索策略模拟随机覆盖特性实现全局探索;硬霜穿刺机制模拟定向生长特性进行局部开发;正向贪婪选择机制确保解的持续优化。与遗传算法、粒子群算法相比,RIME具有参数少、收敛快、自适应平衡等优势,特别适合处理高维复杂优化问题。算法已在工程优化、机器学习等领域获得广泛应用,发表一年内即成为高被引论文。

qq_42212808的博客 783

hiho刷题日记——第三十一天小Hi小Ho的惊天大作战:扫雷·二

题目这次的扫雷是二维的了。根据三种规则做一次判断,判断出一定是雷和一定不是雷的数量。 1.如果某一个被探明的格子里所标的数字为0,那么它相邻的8个格子里的未探明格子被认作是一定不是地雷的格子。 2.如果某一个被探明的格子里所标的数字为K,且它相邻的8个格子里正好有K个没有探明的格子的话,则这K个没有探明的格子被认作是一定是地雷的格子。 3.如果某两个探明了的格子A和B,他们中标明的数字分别为P

AngcFun的博客 1530

【YOLO26实战全攻略】19——智慧交通(一):高速抛洒物与事故检测全流程落地

在智慧交通领域,高速公路抛洒物、交通事故等突发状况常导致二次事故与大规模拥堵,传统人工监控存在响应滞后、覆盖有限等痛点。本文基于Ultralytics YOLO26算法,结合ByteTrack多目标跟踪技术,构建从数据准备、模型训练到边缘部署的全栈式智慧交通检测系统。核心内容包括:多车型专属数据集构建、抛洒物检测模型优化、ByteTrack轨迹跟踪集成、异常事件(违停/逆行/碰撞)识别逻辑实现,以及NVIDIA Jetson边缘设备部署方案。

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

【k8s故障处理篇】calico-node启动失败“Felix is not live: Get “http://localhost:9099/liveness” 解决办法(V1.30.3版本)

【k8s故障处理篇】calico-node启动失败“Felix is not live: Get “http://localhost:9099/liveness” 解决办法(V1.30.3版本)

jks212454的博客 1091

hiho刷题日记——第三十天小Hi小Ho的惊天大作战:扫雷·一

题目简化版扫雷,只有一行。 给出一行的周围3格中是雷的数量。 判断哪些一定是雷,一定不是雷。 思路因为给出的信息是环环相扣的,不用一个一个去试。 只需要试第一格是否为雷就可以通过数据算出后面是否为雷。 所以只用试两次, 第一次把一格设为雷,算出后面的情况;第二次把第一格设为不是雷,算出后面的情况。 若两次都算出来了,则将两次的情况对比,没有变化的部分就是答案。 若只有一次满足条件,则

AngcFun的博客 1234

基于A*算法的二维栅格地图路径规划与避障MATLAB仿真

本文将介绍如何使用MATLAB编写基于A*算法的二维栅格地图路径规划与避障的仿真程序。我们可以使用二维数组表示地图,其中每个元素表示一个栅格的状态,例如1表示障碍物,0表示可行走区域。接下来,我们需要定义A*算法的节点类。G值表示从起始节点到当前节点的代价,H值是启发式函数估计的从当前节点到目标节点的代价。算法,我们可以有效地找到起始点到目标点的最短路径,并在仿真中进行可视化展示。算法的基本思路是从起始节点开始,按照一定的启发式函数选择下一个节点,直到找到目标节点或者遍历完所有可行走区域。

ByteWhizX的博客 1273

hiho刷题日记——第十二天刷油漆

题目一共N个结点的树(1至N编号),油漆能够涂M个结点。 将包含1号结点的一部分连通的结点进行涂漆(这里的连通指的是这一些涂漆的结点可以互相到达并且不会经过没有涂漆的结点),然后将剩下的结点拆掉!那么究竟选择哪些结点进行涂漆呢?小Ho想了想给每个结点都评上了分——他希望最后留下来,也就是涂漆了的那些结点的评分之和可以尽可能的高!输入每个测试点(输入文件)有且仅有一组测试数据。 每组测试数据的第一

AngcFun的博客 1014

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

hiho刷题日记——第九天状态压缩·二

hiho刷题日记——第九天天状态压缩·二题目小Hi和小Ho领到了一个大小为N*M的长方形盘子,他们可以用这个盒子来装一些大小为2*1的蛋糕。但是根据要求,他们一定要将这个盘子装的满满的,一点缝隙也不能留下来,才能够将这些蛋糕带走。这么简单的问题自然难不倒小Hi和小Ho,于是他们很快的就拿着蛋糕离开了~但小Ho却不只满足于此,于是他提出了一个问题——他们有多少种方案来装满这个N*M的盘子呢?代码#in

AngcFun的博客 971

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

hiho刷题日记——第十六天RMQ-ST算法

这两天有事停了两天。这道题也是调了不少时间。好累呀。真想就直接贴代码。ST定义ST[Len][L]表示左边界为L,长度为2^Len的区间中的最小值。则有 ST[Len][L]=min(ST[Len-1][L],ST[Len-1][L+2^(Len-1)]; 然后就可以循环求出所有的ST。答案取小于这个区间长度的最大的2的非负整数次幂T,则答案为min(ST[Len][L],ST[Len][R+1

AngcFun的博客 888

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

hiho刷题日记——第六天01背包

简单的01背包问题,简单的说就是将已有的资源发挥出最大的价值。

AngcFun的博客 743

hiho刷题日记——第十三天最近公共祖先·一

题目已知一棵族谱树。查找两个人的最近公共祖先。输入每个测试点(输入文件)有且仅有一组测试数据。 每组测试数据的第1行为一个整数N,意义如前文所述。 每组测试数据的第2~N+1行,每行分别描述一对父子关系,其中第i+1行为两个由大小写字母组成的字符串Father_i, Son_i,分别表示父亲的名字和儿子的名字。 每组测试数据的第N+2行为一个整数M,表示小Hi总共询问的次数。 每组测试数据的

AngcFun的博客 722

hiho刷题日记——第三天KMP算法

用KMP来求模式串在原串中的出现次数.

AngcFun的博客 702

hiho刷题日记——第八天状态压缩·一

当状态转移方程中状态过多时,进行压缩

AngcFun的博客 701

hiho刷题日记——第十五最近公共祖先·二

题目与最近公共祖先·一 将设置关系数量和查询关系数量的数量级都从100提升到100000。思路用邻接表,将家族关系建树,查询情况建图。 使用离线算法的方式,通过一次深度优先遍历家族树,得出所有查询的答案。 遍历时,第一次访问结点,将该节点做个标记1。访问完结点的所有子结点时,标记为2。 在遍历到一个节点时,在查询图中扫描所有该节点的边,检查边的另一个端点的标记。若标记为0,无视;若标记为1,

AngcFun的博客 694

hiho刷题日记——第二天Trie树

建立Trie树来统计以某字符串为前缀的单词在字典中的个数。

AngcFun的博客 693

hiho刷题日记——第十四天无间道之并查集

题目有两种操作。 0是 设置两人同阵营 1是 查询两人是否同阵营输入每个测试点(输入文件)有且仅有一组测试数据。 每组测试数据的第1行为一个整数N,表示总共进行的操作次数。 每组测试数据的第2~N+1行,每行分别描述一次操作,其中第i+1行为一个整数op_i和两个由大小写字母组成的字符串Name1_i, Name2_i,其中op_i只可能为0或1,当op_i=0时,表示判定Name1_i和N

AngcFun的博客 691

hiho刷题日记——第二十二天更为复杂的买卖房屋姿势

题目小Hi和小Ho所关注的街道的长度为N米,从一端开始每隔1米就有一栋房屋,依次编号为0..N,在游戏的最开始,每栋房屋都有一个初始价格,其中编号为i的房屋的初始价格为p_i,之后共计发生了M次事件,所有的事件都是对于编号连续的一些房屋发生的,其中第i次事件如果是房屋自发的涨价或者降价,则被描述为三元组(L_i, R_i, D_i),表示编号在[L_i, R_i]范围内的房屋的价格的增量(即正数为涨

AngcFun的博客 691

hiho刷题日记——第十九天RMQ问题再临-线段树

题目RMQ问题就是在一个范围内求最值的问题。 这个题目还增加了中途可以改变某个值的大小。 这里是利用线段树求最小值。思路线段树其实有二分的思想在里面。比如我知道第1-8个分别的数值。然后我就可以求出1-2,3-4,5-6,7-8的最值,然后求出1-4,5-8的最值,最后求出1-8的最值。以1-8为树根可以建立一棵二叉树。然后在知道范围的时候,可以把要求的范围分解成已经求出的范围最值来更快的得到答

AngcFun的博客 680
上一篇: hiho刷题日记——第十天后序遍历
下一篇: hiho刷题日记——第十二天刷油漆
昂村饭
博客等级 码龄12年 5粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值