首页 > 其他分享 >树的最长路径

树的最长路径

时间:2023-05-23 13:45:07浏览次数:24  
标签:idx int 路径 m1 m2 最长 dis

题目描述

给定一棵树,树中包含 n 个结点(编号1~n)和 n−1 条无向边,每条边都有一个权值。
现在请你找到树中的一条最长路径。
换句话说,要找到一条路径,使得使得路径两端的点的距离最远。
注意:路径中可以只包含一个点。

输入格式

第一行包含整数 n。
接下来 n−1 行,每行包含三个整数 ai,bi,ci,表示点 ai和 bi之间存在一条权值为 ci的边。

输出格式

输出一个整数,表示树的最长路径的长度。

数据范围

1≤n≤10000,
1≤ai,bi≤n,
−105≤ci≤105

输入样例

6
5 1 6
1 4 5
6 3 9
2 6 8
6 1 7

输出样例

22

题目分析

image
image
image

代码实现

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
#define int long long 
const int N=1e4+5;
int h[N],e[2*N],w[2*N],ne[2*N],idx;
int ans;
void add(int x,int y,int z){
	e[idx]=y,w[idx]=z,ne[idx]=h[x],h[x]=idx++;
}
int dfs(int u,int f){
	int dist=0,m1=0,m2=0;
	for(int i=h[u];~i;i=ne[i]){
		int j=e[i];
		//由于树建立的是无向边,防止回头
		if(j==f)continue;
		//计算该节点向下的路径
		int dis=dfs(j,u)+w[i];
		//不断更新该节点向下的最长路径
		dist=max(dis,dist);
		//更新该节点向下的最长路径和次长路径
		if(dis>m1)m2=m1,m1=dis;
		else if(dis>m2)m2=dis;
	}
	//答案即为每个结点的最长路径和次长路径之和的最大值
	ans=max(ans,m1+m2);
	return dist;
}
signed main(){
	int n,x,y,z;
	cin>>n;
	memset(h,-1,sizeof h);
	for(int i=0;i<n-1;i++){
		cin>>x>>y>>z;
		//建立无向边
		add(x,y,z);
		add(y,x,z);
	}
	dfs(1,-1);
	cout<<ans<<endl;
	return 0;
}

标签:idx,int,路径,m1,m2,最长,dis
From: https://www.cnblogs.com/hxss/p/17424450.html

相关文章

  • JavaScript正则获取a标签中的path路径值-流程引擎-计算引擎
    直接上代码://获取附件中的链接地址functionget_file_path_from_encode_value(x){vararrLink=[];x.replace(/<a[^>]*path=['"]([^'"]+)[^>]*/gi,function(match,capture){arr......
  • 图解LeetCode——剑指 Offer 34. 二叉树中和为某一值的路径
    一、题目给你二叉树的根节点root和一个整数目标和targetSum,找出所有从根节点到叶子节点路径总和等于给定目标和的路径。叶子节点是指没有子节点的节点。二、示例2.1>示例1:【输入】root=[5,4,8,11,null,13,4,7,2,null,null,5,1],targetSum=22【输出】[[5,4,11,2],[5,......
  • 导入文件的目录路径
    earth-forecasting-transformer/src/earthformer/config.pyscripts/cuboid_transformer/enso/train_cuboid_enso.py在这种情况下,你可以使用以下代码在"train_cuboid_enso.py"中导入"cfg":from.......
  • 力扣---1080. 根到叶路径上的不足节点
    给你二叉树的根节点root和一个整数limit,请你同时删除树中所有不足节点,并返回最终二叉树的根节点。假如通过节点node的每种可能的“根-叶”路径上值的总和全都小于给定的limit,则该节点被称之为不足节点,需要被删除。叶子节点,就是没有子节点的节点。 示例1:输入:r......
  • clip-path 剪切不规则路径后,阴影不生效问题
    正常来说:我们使用box-shadow都是能够生效的,但由于使用了clip剪切功能,使用阴影被剪切了所以我们在使用clip的时候只需要超出path就行了,比如:height:50px;width:100px;background:antiquewhite;clip-path:polygon(50%10%,0%100%,100%100%);box-......
  • matlab默认工作路径的修改方法,永久的
    说起来也简单,就是到安装路径文件夹下C:\ProgramFiles\R2011a\toolbox\local找文件mathrc.m文件,在最后一行添加cd'你想要的默认路径下文件夹',andifyoufinishthisstep,thenyoumakeit.......
  • ExtJS 4中动态加载的路径设置
         在此首先感谢的文顺网友,是他提醒了我需要写这文的。     在Loader对象中,动态加载是使用getPath方法获取下载路径的,其代码如下:1 getPath: function(className) {2     var path = '',3         paths =......
  • 八叉树建立地图并实现路径规划导航
    构建语义地图时,用的是octomap_server和semantic_slam:octomap_generator,不过还是整理下之前的学习笔记。一、Octomap安装并使用Octomap_Server1.1Apt安装Octomap库如果你不需要修改源码,可以直接安装编译好的octomap库,记得把ROS版本「kinetic」替换成你用的:sudoapt-get......
  • 力扣---1372. 二叉树中的最长交错路径
    给你一棵以 root 为根的二叉树,二叉树中的交错路径定义如下:选择二叉树中任意 节点和一个方向(左或者右)。如果前进方向为右,那么移动到当前节点的的右子节点,否则移动到它的左子节点。改变前进方向:左变右或者右变左。重复第二步和第三步,直到你在树中无法继续移动。交错路径的长度......
  • 最短路径算法
    最短路径问题这是一类最基本的图论问题,给定一个图,求从某一个源节点到某一个目的节点的最短路径。比较常见的算法有dijkstra,floyd,SPFA。在开始之前我们先说一说“松弛”这个词。在描述最短路径算法的时候,我们经常可以看到松弛(relaxtion)一词,通常来说,所有的最短路径算法都......