输入输出样例
输入 #1
5 1 2 2 3 4 2 5 1
输出 #1
3
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int h[N], ne[N], e[N], idx, pos;
int n,ans,ansid;
int dis[N];
void add(int a, int b) {
e[idx] = b;
ne[idx] = h[a];
h[a] = idx++;
}
void dfs(int now,int father) {
for (int i = h[now];i != -1;i = ne[i]) {
int j = e[i];
if (j!=father) {
dis[j] = dis[now] + 1;//步数+1;
dfs(j, now);
}
}
}
int main() {
cin >> n;//n个点,n-1个边;
memset(h, -1, sizeof h);
for (int i = 0;i < n - 1;i++) {
int a, b;
cin >> a >> b;
add(a, b);
add(b, a);
}
dfs(1,0);
int ans = -1;
for (int i = 1;i <= n;i++)//遍历每一个结点,找出最远的结点;
if (dis[i] > ans)
{
ans = dis[i];
pos = i;
}
memset(dis, 0, sizeof dis);
dfs(pos, 0);
for (int i = 1;i <= n;i++)//遍历每一个结点
ans = max(ans, dis[i]);
cout << ans << endl;
}