hihoCoder week11 树中的最长路

题目链接: https://hihocoder.com/contest/hiho11/problem/1

求树中节点对 距离最远的长度

#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 10;
int n;
vector<int> G[N];
int d[N];
void dfs(int u, int fa)
{
    for(int i=0; i<G[u].size(); i++) {
        int v = G[u][i];
        if(v != fa) {
            d[v] = d[u] + 1;
            dfs(v, u);
        }
    }
}

int main()
{
    freopen("in.txt", "r", stdin);
    scanf("%d",&n);
    for(int i=0; i<n-1; i++) {
        int a,b; scanf("%d %d", &a, &b);
        G[a].push_back(b);
        G[b].push_back(a);
    }
    d[1] = 0;
    dfs(1, 0);
    int mx =  0;
    int index = -1;
    for(int i=1; i<=n; i++) {
        if(mx < d[i]) {
            mx = d[i];
            index = i;
        }
    }
    //printf("%d\n", mx);
    memset(d,0,sizeof(d));
    dfs(index, 0);
    for(int i=1; i<=n; i++) {
        if(mx < d[i]) {
            mx = d[i];
            index = i;
        }
    }
    cout << mx <<endl;
    return 0;
}
#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 10;
vector<int> G[N];
int n, ans;

int dfs(int u,int fa)
{
    int l1=-1,l2=-1;
    for(int i=0; i<G[u].size(); i++) {
        int v = G[u][i];
        if(v == fa) continue;
        int l = dfs(v, u);
        if(l > l1)
            l2=l1 , l1=l;
        else
            l2 = max(l2, l);

    }
    //cout << u <<" "<< l1 <<" "<< l2 <<endl;
    ans = max(ans , l1 + l2 + 2);
    // cout << u <<" 最长的路为" <<l1 <<endl;
    return l1+1;
}

int main()
{
    //freopen("in.txt", "r", stdin);
    cin >> n;
    for(int i=1; i<n; i++) {
        int a,b; scanf("%d %d", &a, &b);
        G[a].push_back(b);
        G[b].push_back(a);
    }
    ans = 0;
    dfs(1,0);
    cout << ans <<endl;
    return 0;
}

原文地址:https://www.cnblogs.com/Draymonder/p/9977514.html

时间: 2024-10-12 11:53:25

hihoCoder week11 树中的最长路的相关文章

HihoCoder #1050 树中的最长路

#1050 : 树中的最长路 Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB 描述 上回说到,小Ho得到了一棵二叉树玩具,这个玩具是由小球和木棍连接起来的,而在拆拼它的过程中,小Ho发现他不仅仅可以拼凑成一棵二叉树!还可以拼凑成一棵多叉树——好吧,其实就是更为平常的树而已. 但是不管怎么说,小Ho喜爱的玩具又升级换代了,于是他更加爱不释手(其实说起来小球和木棍有什么好玩的是吧= =).小Ho手中的这棵玩具树现在由N个小球和

hihocoder#1050 : 树中的最长路(树中最长路算法 两次BFS找根节点求最长+BFS标记路径长度+bfs不容易超时,用dfs做TLE了)

#1050 : 树中的最长路 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到,小Ho得到了一棵二叉树玩具,这个玩具是由小球和木棍连接起来的,而在拆拼它的过程中,小Ho发现他不仅仅可以拼凑成一棵二叉树!还可以拼凑成一棵多叉树——好吧,其实就是更为平常的树而已. 但是不管怎么说,小Ho喜爱的玩具又升级换代了,于是他更加爱不释手(其实说起来小球和木棍有什么好玩的是吧= =).小Ho手中的这棵玩具树现在由N个小球和N-1根木棍拼凑而成,这N个小球都被小Ho标上了不

题解报告:hihoCoder #1050 : 树中的最长路

描述 上回说到,小Ho得到了一棵二叉树玩具,这个玩具是由小球和木棍连接起来的,而在拆拼它的过程中,小Ho发现他不仅仅可以拼凑成一棵二叉树!还可以拼凑成一棵多叉树--好吧,其实就是更为平常的树而已. 但是不管怎么说,小Ho喜爱的玩具又升级换代了,于是他更加爱不释手(其实说起来小球和木棍有什么好玩的是吧= =).小Ho手中的这棵玩具树现在由N个小球和N-1根木棍拼凑而成,这N个小球都被小Ho标上了不同的数字,并且这些数字都是出于1..N的范围之内,每根木棍都连接着两个不同的小球,并且保证任意两个小球

hiho #1050 : 树中的最长路 树的直径

#1050 : 树中的最长路 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到,小Ho得到了一棵二叉树玩具,这个玩具是由小球和木棍连接起来的,而在拆拼它的过程中,小Ho发现他不仅仅可以拼凑成一棵二叉树!还可以拼凑成一棵多叉树——好吧,其实就是更为平常的树而已. 但是不管怎么说,小Ho喜爱的玩具又升级换代了,于是他更加爱不释手(其实说起来小球和木棍有什么好玩的是吧= =).小Ho手中的这棵玩具树现在由N个小球和N-1根木棍拼凑而成,这N个小球都被小Ho标上了不

求树中的最长路 (*【模板】)

两次DFS求树中的最长路. 基于邻接矩阵: 代码: #include <stdio.h> #include <string.h> #include <vector> #include <iostream> #include <string> #include <algorithm> using namespace std; bool map[10001][10001]; int n; int tail; bool vis[1001];

hiho#1050 : 树中的最长路

#1050 : 树中的最长路 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到,小Ho得到了一棵二叉树玩具,这个玩具是由小球和木棍连接起来的,而在拆拼它的过程中,小Ho发现他不仅仅可以拼凑成一棵二叉树!还可以拼凑成一棵多叉树--好吧,其实就是更为平常的树而已. 但是不管怎么说,小Ho喜爱的玩具又升级换代了,于是他更加爱不释手(其实说起来小球和木棍有什么好玩的是吧= =).小Ho手中的这棵玩具树现在由N个小球和N-1根木棍拼凑而成,这N个小球都被小Ho标上了不

树中的最长路(hihocoder 第十一周)

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到,小Ho得到了一棵二叉树玩具,这个玩具是由小球和木棍连接起来的,而在拆拼它的过程中,小Ho发现他不仅仅可以拼凑成一棵二叉树!还可以拼凑成一棵多叉树——好吧,其实就是更为平常的树而已. 但是不管怎么说,小Ho喜爱的玩具又升级换代了,于是他更加爱不释手(其实说起来小球和木棍有什么好玩的是吧= =).小Ho手中的这棵玩具树现在由N个小球和N-1根木棍拼凑而成,这N个小球都被小Ho标上了不同的数字,并且这些数字都是出于

HihoCoder1050 树中的最长路 树形DP第三题(找不到对象)

题意:求出的树中距离最远的两个结点之间相隔的距离. 水题一道,以前只会用路的直径来解. 代码如下: #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<memory> #include<algorithm> using namespace std; const int maxn=200010; int dis[maxn],La

[HIHO1050]树中的最长路(树直径)

题目链接:http://hihocoder.com/problemset/problem/1050 整理个板子 1 /* 2 ━━━━━┒ギリギリ♂ eye! 3 ┓┏┓┏┓┃キリキリ♂ mind! 4 ┛┗┛┗┛┃\○/ 5 ┓┏┓┏┓┃ / 6 ┛┗┛┗┛┃ノ) 7 ┓┏┓┏┓┃ 8 ┛┗┛┗┛┃ 9 ┓┏┓┏┓┃ 10 ┛┗┛┗┛┃ 11 ┓┏┓┏┓┃ 12 ┛┗┛┗┛┃ 13 ┓┏┓┏┓┃ 14 ┃┃┃┃┃┃ 15 ┻┻┻┻┻┻ 16 */ 17 #include <algorithm>