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

    求树的直径DFS

    两次DFS,第一次随便一个点的最远点(这个最远点就是直径的一端),第二次这个最远点再找到一个最远点即可

    #include<iostream>
    #include<cstring>
    using namespace std;
    
    const int N = 1010;
    int h[N],e[N*2],ne[N*2],w[N*2],idx;
    void add(int a,int b,int c)
    {
        e[idx]=b;
        w[idx]=c;
        ne[idx]=h[a];
        h[a]=idx++;
    }
    int root,max_len;
    bool st[N];
    void dfs(int x,int len)
    {
        st[x]=true;
        if(len>max_len){
            root=x;
            max_len=len;
        }
        for(int i=h[x];i!=-1;i=ne[i]){
            int j=e[i];
            int c=w[i];
            if(!st[j]){
                dfs(j,len+c);
                st[j]=false;
            }
        }
    }
    int main()
    {
        int n;
        cin>>n;
        memset(h,-1,sizeof h);
        for(int i=0;i<n-1;++i){
            int a,b,c;
            cin>>a>>b>>c;
            add(a,b,c);
            add(b,a,c);
        }
        dfs(1,0);
        memset(st,false,sizeof st);
        dfs(root,0);
        cout<<max_len<<endl;
    }
    
  • 相关阅读:
    Android 一个TextView中设置多种不同大小的字体,设置超链接
    Android Okhttp POST提交键值对
    第九天
    第八天
    第七天
    第六天
    第三天
    day 51
    day 49
    day 48 bootstrap
  • 原文地址:https://www.cnblogs.com/clear-love/p/11310548.html
Copyright © 2011-2022 走看看