树的最长路径(最远点对)

 

一、定义

  对于一棵n个结点的无根树,找到一条最长路径。简单说,要找到两个点,使得它们的距离最远。  

 

二、求解

基本的求法是,先随便找一个点作为根结点转换为无根树后,遍历每一个点,找出当i为根结点时的子树到叶子的最大距离d(j),在根据d(j)求出结点i作为根结点时整个树的最长路径,维护最长路径即可。

  1.状态定义:d(i),i为根结点的子树到叶子的最大距离。
  2.状态转移方程:

    d(i)=max{d(j)+w(i)}

#include<stdio.h>
#include<stdlib.h>
#define FORa(i,s,e) for(int i=s;i<=e;i++)
#define FORs(i,s,e) for(int i=s;i>=e;i--)

using namespace std;
const int N=1000,INF=2147483647;
int n,num_edge,ans,head[N+1],d[N+1]; 
struct Edge{
    int next,to,dis;
}edge[2*N];
inline void Add_edge(int from,int to,int dis)
{
    edge[++num_edge]=(Edge){head[from],to,dis},head[from]=num_edge;
}
inline int max(int fa,int fb){return fa>fb?fa:fb;}

inline int Dfs(int u,int fa,int dis)
{
    int max1=0,max2=0;//子树的链中的最大值与次大值 
    for(int i=head[u];i;i=edge[i].next)
    {
        if(edge[i].to!=fa) 
        {
            Dfs(edge[i].to,u,dis+edge[i].to);
            if(d[edge[i].to]+edge[i].dis>max1)
                max2=max1,max1=d[edge[i].to]+edge[i].dis;
            else if(d[edge[i].to]+edge[i].dis>max2)
                max2=d[edge[i].to]+edge[i].dis; 
        }
    }
    d[u]=max1;
    //考虑到将u作为根节点,更新子树的链中的最大值与次大值 
    if(dis>max1)
        max2=max1,max1=dis;
    else if(dis>max2)
        max2=dis;
    ans=max(max1+max2,ans);
}
int main()
{
    int from,to,dis;
    scanf("%d",&n);
    FORa(i,2,n)
    {
        scanf("%d%d%d",&from,&to,&dis);
        Add_edge(from,to,dis),Add_edge(to,from,dis);
    }
    Dfs(1,0,0);
    printf("%d",ans);
    return 0;
}
/*7
1 2 4
1 3 2
2 5 1
2 6 4
3 4 9
5 7 10
*/

 

 

 

转载于:https://www.cnblogs.com/SeanOcean/p/11309724.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
点采样算法(PCL)是一种在三维空间中对点云数据进行采样的算法。点云是由大量离散点组成的三维数据集,可用于表示物体的形状、结构和特征等信息。 最点采样算法的目标是从点云数据中选择一组具有最大平均距离的离散点集合。这样的采样结果能够更好地表示原始点云数据的几何特征,可以用于点云数据的降采样、特征提取等应用。 算法的实现步骤如下: 1. 随机选择一个初始点作为起始采样点; 2. 计算其他所有点与已选取的采样点之间的距离,并选择距离最的点作为下一个采样点; 3. 重复步骤2,直到选取足够数量的采样点,或者达到预定的采样密度。 该算法的优点是能够保留点云数据的重要几何特征,尤其适用于包含明显结构的点云数据。通过最点采样,可以有效地减少点云数据的规模,提高后续处理的效率。 然而,最点采样算法也存在一些限制。例如,在点云数据中存在噪音或稀疏区域时,算法可能无法准确地选择代表性的采样点。此外,算法的性能受点云数据的分布、密度和采样数量等因素的影响。 总之,最点采样算法是一种常用的点云数据采样方法,通过选择具有最大平均距离的点,能够保留点云数据的几何特征。它在点云处理和分析中具有广泛应用,可用于降采样、特征提取、配准等任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值