样例通过,提交 60 pts
#include <bits/stdc++.h>
using namespace std;
struct node {
int u;
int v;
} e[600015];
int n, m;
int pnt;
int head[600015];
int dp[600015];
void AddEdge (int u, int v) {
e[++pnt].u = v;
e[pnt].v = head[u];
head[u] = pnt;
}
void dfs (int cur, int fa) {
bool isleaf = true;
int cnt = 0;
int Max = 0, Semax = 0;
for (int p = head[cur]; p; p = e[p].v) {
if (e[p].u == fa) continue;
dfs(e[p].u, cur);
isleaf = false;
dp[cur] = max(dp[cur], dp[e[p].u]);
cnt++;
if (dp[e[p].u] > Max) {
Semax = Max;
Max = dp[e[p].u];
} else if (dp[e[p].u] > Semax) Semax = dp[e[p].u];
}
if (isleaf)
dp[cur] = 1;
else
dp[cur] += cnt;
if (isleaf)
pnt = max(pnt, 1);
else if (cnt == 1)
pnt = max(pnt, Max + 1);
else
pnt = max(pnt, Max + Semax + cnt - 1);
}
int main () {
scanf("%d%d", &n, &m);
for (int i = 1, u, v; i < n; i++) {
scanf("%d%d", &u, &v);
AddEdge(u, v);
AddEdge(v, u);
}
pnt = 0;
dfs(1, -1);
printf("%d", pnt);
return 0;
}