- #include<bits/stdc++.h>
- using namespace std;
- int root,res, finalmaxchilddis;
- int n;
- struct Node
- {
- int h=0,maxchilddis=-1,parent=-1,max=-1,sec=-1;
- vector<int> child;
- };
- int main()
- {
- while(cin>>n)
- {
- finalmaxchilddis=-1;
- Node node[n];
- for(int i=0;i<n-1;i++)
- {
- int p,c;
- cin>>p>>c;
- node[c].parent=p;
- node[p].child.push_back(c);
- }
- for(int i=0;i<n;i++)
- {
- if(node[i].parent==-1)
- {
- root=i;
- }
- if(node[i].child.size()==0)
- {
- int h=0;
- int parent=node[i].parent;
- while(parent!=-1)
- {
- h++;
- if(h>node[parent].h)
- node[parent].h=h;
- else
- break;
- parent=node[parent].parent;
- }
- }
- }
- for(int i=0;i<n;i++)
- {
- if(node[i].child.size()>=2)
- {
- for(int j=0;j<node[i].child.size();j++)
- {
- int childh=node[node[i].child[j]].h;
-
-
- if(childh>node[i].max)
- {
- node[i].sec=node[i].max;
- node[i].max=childh;
- }
- else if(childh>node[i].sec)
- node[i].sec=childh;
- }
- node[i].maxchilddis=node[i].max+node[i].sec+2;
- if(node[i].maxchilddis>finalmaxchilddis)
- {
- finalmaxchilddis=node[i].maxchilddis;
- }
- }
- }
- if(node[root].h>finalmaxchilddis)
- {
- res=node[root].h;
- }else
- {
- res=finalmaxchilddis;
- }
-
- cout<<res<<endl;
- }
- return 0;
- }
複製代碼 |