树上最长距离模板

板子题链接https://www.nowcoder.com/acm/contest/136/C

#include<bits/stdc++.h>
using namespace std;
struct edge
{
    int v,nxt;

}e[2000000+10];
int head[1000000+10];
int ans=-1,n,tot,pos;
void dfs(int k,int fa,int d)
{
    if(d>ans)
    {
        ans=d;
        pos=k;
    }
    for(int i=head[k];i!=-1;i=e[i].nxt)
    {
        int x=e[i].v;
        if(x==fa)
        continue;
        dfs(x,k,d+1);
    }
}
int main()
{
    #pragma comment(linker, "/STACK:102400000,102400000");
    int n;
    scanf("%d",&n);
    for(int i=0;i<=n;i++)
        head[i]=-1;
    tot=0;
    for(int i=1;i<n;i++)
    {
        int u,v;
        scanf("%d %d",&u,&v);
        edge tmp;
        tmp.v=v;
        tmp.nxt=head[u];
        e[++tot]=tmp;
        head[u]=tot;
        tmp.v=u;
        tmp.nxt=head[v];
        e[++tot]=tmp;
        head[v]=tot;

    }
    dfs(1,-1,0);
    dfs(pos,-1,0);
    cout<<ans+1<<endl;
}

 

posted @ 2018-08-18 22:10  eason99  阅读(80)  评论(0编辑  收藏  举报