因為英文不好,所以變數名稱很奇怪。
#include <bits/stdc++.h>
using namespace std;
struct Node
{
vector<Node*> child;
Node* dad=nullptr;
int floor=0;
};
int find_floor(Node* n)
{
if(!n->child.empty())
{
for(int i=0; i<n->child.size(); i++)
{
n->floor=max(n->floor,find_floor(n->child[i])+1);
}
}
return n->floor;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n;
while( cin>>n)
{
vector<Node*> tree;
for(int i=0; i<n; i++)
{
Node* ne=new Node;
tree.push_back(ne);
}
int a,b;
for(int i=0; i<n-1; i++)
{
cin>>a>>b;
tree[b]->dad=tree[a];
tree[a]->child.push_back(tree[b]);
}
Node* root=tree[0];
while(root->dad!=nullptr)
{
root=root->dad;
}
find_floor(root);
int case_1=0,case_2=0;
case_1=root->floor;
for(int i=0; i<n; i++)
{
if(tree[i]->child.size()>=2)
{
if(tree[i]->child.size()>2)
{
for(int j=0; j<2; j++)
{
for(int k=j+1; k<tree[i]->child.size(); k++)
{
if(tree[i]->child[j]->floor<tree[i]->child[k]->floor)
{
Node* tmp=tree[i]->child[k];
tree[i]->child[k]=tree[i]->child[j];
tree[i]->child[j]=tmp;
}
}
}
}
case_2=max(case_2,tree[i]->child[0]->floor+tree[i]->child[1]->floor+2);
}
}
cout<<max(case_1,case_2)<<"\n";
}
return 0;
}