#include<bits/stdc++.h>
using namespace std;
const int N = 5e4 + 10 , M = 1e5 + 10;
int h[N] , e[M] , ne[M] , w[M] , idx = 0;
bool st[N];
int ans = 0;
void add(int a , int b , int c)
{
w[idx] = c;
e[idx] = b;
ne[idx] = h[a];
h[a] = idx++;
}
int dfs(int u)
{
st[u] = true;
int d1 = 0 , d2 = 0; //d1从u向下走的最大长度,d2从u向下走的次大长度
for(int i = h[u] ; i != -1 ; i = ne[i])
{
int j = e[i];
if(st[j]) continue;
int d = dfs(j) + w[i];
if(d >= d1) d2 = d1 , d1 = d;
else if(d > d2) d2 = d;
}
ans = max(ans , d1+d2);
return d1;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n;
cin >> n;
memset(h , -1 , sizeof h);
for(int i = 1 ; i <= n-1 ; i++)
{
int a , b , c;
cin >> a >> b >> c;
add(a , b , c);
add(b , a , c);
}
int t = dfs(1);
cout << ans;
}
树的直径(c++)
最新推荐文章于 2024-07-19 15:45:46 发布