zoukankan      html  css  js  c++  java
  • 树的直径

    树的直径的定义:

    对于求树的直径,我们有两种方法,使用两次dfs遍历和bfs遍历。

    我选用的是dfs遍历,两次dfs遍历。

    第一次:任选一个节点,找到最长路的节点去。

    第二次:以刚刚走到的那个节点为原点,再跑一遍最长路。

    某位Dalao博客中对于其的证明

    #include<bits/stdc++.h>
    using namespace std;
    int n,x,y;
    const int maxn=1e6+7;
    struct node{
        int next;
        int to;
    }tree[maxn*2];
    int head[maxn],cnt;
    void add(int x,int y){
        tree[++cnt].next=head[x];
        tree[cnt].to=y;
        head[x]=cnt;
    }int dis[maxn];int num;
    int maxx=0;
    void dfs(int x){
        for(int i=head[x];i;i=tree[i].next){
            int v=tree[i].to;
            if(!dis[v]){
                dis[v]=dis[x]+1;
                dfs(v);
            }
        }
    } 
    int main(){
        scanf("%d",&n);
        for(int i=1;i<n;i++){
            scanf("%d%d",&x,&y);
            add(x,y);
            add(y,x);
        }
        dfs(1);
        maxx=0;//保存最长路所在节点 
        for(int i=1;i<=n;i++){
            if(dis[i]>dis[maxx]){
                maxx=i;
            }
        }
        memset(dis,0,sizeof(dis));
        dfs(maxx);
        for(int i=1;i<=n;i++){
            if(dis[i]>dis[maxx]){
                maxx=i;
            }
        }
        printf("%d",dis[maxx]);
        return 0;
    }
  • 相关阅读:
    Google 嘘! 嘘!
    zabbix fast
    zabbix
    kernel update
    列表推导
    Ddos 反射性防护 simple
    file cycle
    Scala
    Hadoop
    数据库
  • 原文地址:https://www.cnblogs.com/LJB666/p/11016276.html
Copyright © 2011-2022 走看看