题目描述
现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1e6+5;
int fa[maxn];
int child[maxn];
int vis[maxn];
int dfs(int i);
void init()
{
for(int i=0;i<maxn;++i)
{
fa[i]=i;
child[i]=0;
vis[i]=0;
}
}
void join(int x,int y) //x是y的父亲
{
child[x]++;
if(child[x]>=3)
{
vis[y]=1;
return ;
}
fa[y]=x;
return ;
}
int main()
{
int n,x,y;
while(cin>>n)
{
init();
for(int i=0;i<n-1;i++)
{
cin>>x>>y;
join(x,y);
}
int big_num=0,a;
for(int i=0;i<n-1;i++)
{
a=dfs(i);
big_num=big_num>a?big_num:a;
}
cout<<big_num<<endl;
}
return 0;
}
int dfs(int i)
{
int tree_len=1;
int t=i;
while(t!=fa[t])
{
t=fa[t];
tree_len++;
}
if(vis[t]) return 0;
return tree_len;
}