关闭

hiho 11 树的最长路径

标签: dfs
196人阅读 评论(0) 收藏 举报
分类:

问题描述

树中两个结点之间的最长距离, 距离指两个节点之间的边数。

解决方法

首先选择一个点作为树的根节点,对于以t为根的子树,L1和L2表示从t到叶子节点的最长距离和次长距离,那么子树对应的结果是 L1+L2;
树在存储时,可以按照无向边存储,在dfs访问时,传入父节点的指针,遍历时,如果是父节点就跳过。

#include <vector>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
enum{maxn = 100000+5};
vector<int> tree[maxn];
int res = -1;
int findMax(int t, int pre)
{
    int first = -1, sec = -1;
    for (int i=0; i< tree[t].size(); i++)
    {
        if (tree[t][i] != pre)
        {
            sec = max(sec, findMax(tree[t][i], t));
            if (first < sec)
                swap(first, sec);
        }
    }
    res = max(res, first+sec+2);
    return first +1;
}


#define OJ
int main()
{
    #ifndef OJ
    freopen("in.txt", "r", stdin);
    #endif // OJ
    int n;
    scanf("%d", &n);
    for (int i=0; i< n-1; i++)
    {
        int a, b;
        scanf("%d %d", &a, &b);
        tree[a].push_back(b);
        tree[b].push_back(a);
    }
    findMax(1, 0);
    printf("%d\n", res);
    return 0;
}
0
0

猜你在找
【套餐】Hadoop生态系统零基础入门
【套餐】嵌入式Linux C编程基础
【套餐】2017软考系统集成项目——任铄
【套餐】Android 5.x顶级视频课程——李宁
【套餐】深度学习入门视频课程——唐宇迪
【直播】广义线性模型及其应用——李科
【直播】从0到1 区块链的概念到实践
【直播】计算机视觉原理及实战——屈教授
【直播】机器学习之凸优化——马博士
【直播】机器学习&数据挖掘7周实训--韦玮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:18606次
    • 积分:1324
    • 等级:
    • 排名:千里之外
    • 原创:108篇
    • 转载:35篇
    • 译文:4篇
    • 评论:0条
    文章分类