dp[u]
为以u为根的子树中离u最远的点的路径长度
转移方程(v为u的子结点):dp[u] = max(dp[u], dp[v] + w(u, v))
两条经过根结点的最长路径即为该子树中的直径
转移方程:zj = max(zj, dp[u] + dp[v] + w(u, v))
const int N = 10000 + 10;
int n, zj = 0;
int dp[N];
vector<int> g[N];
void dfs(int u, int fa)
{
for (int v : E[u])
{
if (v == fa) continue;
dfs(v, u);
zj = max(zj, dp[u] + dp[v] + 1); // 如为有权边,把1换成权值即可
dp[u] = max(dp[u], dp[v] + 1); // 如为有权边,把1换成权值即可
}
}
int main()
{
cin >> n;
for (int i = 1; i < n; i++)
{
int u, v;
cin >> u >> v;
g[u].push_back(v), g[v].push_back(u);
}
dfs(1, 0);
cout << zj << '\n';
return 0;
}