模板
两次 dfs
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5+5;
int n, p, dis[N];
vector<int> g[N];inline int read(){int s=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){s=(s<<3)+(s<<1)+(c^48);c=getchar();}return s*f;
}
void dfs(int x, int fa){for(int i=0;i<g[x].size();i++){int t = g[x][i];if(t == fa)continue;dis[t] = dis[x] + 1;dfs(t, x);}
}
int main(){n = read();for(int i=1;i<n;i++){int u = read(), v = read();g[u].push_back(v);g[v].push_back(u);}dfs(1, 0);p=1;for(int i=1;i<=n;i++)if(dis[p] < dis[i])p=i;memset(dis, 0, sizeof dis);dfs(p, 0);p=1;for(int i=1;i<=n;i++)if(dis[p] < dis[i])p=i;cout << dis[p];return 0;
}