如题,这是代码
#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i=a;i<n;i++)
#define per(i,a,n) for(int i=n-1;i>=a;i--)
typedef long long ll;
typedef double db;
typedef pair<int,int> P;
typedef vector<int> VI;
const ll mod=1000000007;
const int maxn=2e5+10;
const int inf=0x3f3f3f3f;
ll gcd(ll a,ll b) {
return b?gcd(b,a%b):a;
}
#define ms(a) memset(a,0,sizeof(a))
#define mss(a) memset(a,-1,sizeof(a))
#define msi(a) memset(a,inf,sizeof(a))
#define iossync ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
struct node{
int to,next;
}edge[maxn<<1];
int head[maxn];
int n,x,y;
int cnt;
void addedge(int x,int y)
{
edge[++cnt].to=y;
edge[cnt].next=head[x];
head[x]=cnt;
}
P dfs(int now,int deep,int fa)
{
int ans=deep;
int dis=now;
for(int i=head[now];i;i=edge[i].next)
{
int d=edge[i].to;
if(d==fa)
continue;
// ans=max(dfs(d,deep+1,now),ans);
P qwe=dfs(d,deep+1,now);
if(qwe.first>ans)
{
ans=qwe.first;
dis=qwe.second;
}
}
return {ans,dis};
}
int main()
{
cin>>n;
rep(i,0,n-1)
{
cin>>x>>y;
addedge(x,y);
addedge(y,x);
}
int u,v;
int d1,d2;
// v=dfs()
P ans=dfs(1,1,0);
u=ans.second;
d1=ans.first;
ans=dfs(u,1,0);
v=ans.second;
d2=ans.first;
cout<<d2-1<<"\n";
return 0;
}