zoukankan      html  css  js  c++  java
  • tyvj4865 天天和树tree

    #include<bits/stdc++.h>
    #define MAXN 100000+10
    using namespace std;
    struct ed{int v,next;}edge[2*MAXN];
    int n,far1,far2,maxlen,ans=0,head[MAXN],pre[MAXN],d[MAXN];
    bool is[MAXN],vis[MAXN];
    void add(int u,int v){
        static int tot=0;
        edge[++tot].v=v;
        edge[tot].next=head[u];
        head[u]=tot;
    }
    void dfs1(int u,int fa,int len){
        if(len>maxlen){maxlen=len;far1=u;}
        for(int i=head[u];i;i=edge[i].next){
            int v=edge[i].v;
            if(v!=fa)dfs1(v,u,len+1);
        }
    }
    void dfs2(int u,int fa,int len){
        pre[u]=fa;
        if(len>maxlen){maxlen=len;far2=u;}
        for(int i=head[u];i;i=edge[i].next){
            int v=edge[i].v;
            if(v!=fa)dfs2(v,u,len+1);
        }
    }
    void dfs3(int u,int fa,int dis){
        d[u]=dis;
        for(int i=head[u];i;i=edge[i].next){
            int v=edge[i].v;
            if(v!=fa)dfs3(v,u,dis+1);
        }
    }
    int main(){
        scanf("%d",&n);
        for(int i=1;i<n;i++){
            int u,v;
            scanf("%d%d",&u,&v);
            add(u,v);add(v,u);
        }
        maxlen=0;
        dfs1(1,1,1);
        maxlen=0;
        dfs2(far1,far1,1);
        is[far1]=1;
        for(int i=far2;i!=pre[i];i=pre[i])is[i]=1;
        for(int u=1;u<=n;u++)
            if(is[u]){
                for(int i=head[u];i;i=edge[i].next){
                    int v=edge[i].v;
                    if(!is[v])dfs3(v,u,1);
                }
            }    
        for(int i=1;i<=n;i++)
            if(!is[i])ans=max(ans,d[i]);
        printf("%d",ans);        
        return 0;
    }

    找直径即可,正确性显然(嘿嘿嘿。。。)

     其实反证法很容易搞定。。。。

    Hello World
  • 相关阅读:
    串口操作
    图片转化成二进制数据、等比缩放
    DSO Framer Control Object 操作word文件
    C#图片存入数据库及其读出显示
    对话框的用法
    C#读取数据库中的表
    将Resource中的图片资源动态绑定到PictureBox中:
    ProgressBar
    C# 操作数据库表和数据库
    操作系统–进程管理
  • 原文地址:https://www.cnblogs.com/NINGLONG/p/7554531.html
Copyright © 2011-2022 走看看