分析:
样例:
深搜
#include<iostream>
#include<cstring>
using namespace std;
const int N = 20010;
int d1[N], d2[N], p[N], up[N];
int e[N], ne[N], idx, w[N], h[N];
void add(int a, int b, int c)
{
e[idx] = b; ne[idx] = h[a]; w[idx] = c; h[a] = idx ++;
}
void dfs_d(int j, int u)
{
if(u != -1)p[j] = u;
for(int id = h[j]; ~id; id = ne[id])
{
int i = e[id];
if(u == i)continue;
dfs_d(i, j);
int dist = w[id] + d1[i];
if(dist > d1[j])
d2[j] = d1[j], d1[j] = dist;
else if(dist > d2[j])d2[j] = dist;
}
}
void dfs_u(int j, int u)
{
for(int id = h[j]; ~id; id = ne[id])
{
int i = e[id];
if(i == u)continue;
if(d1[j] == d1[i] + w[id])
{
up[i] = max(d2[j], up[j]) + w[id];
}
else
up[i] = max(d1[j], up[j]) + w[id];
dfs_u(i, j);
// cout << j << " " << up[j] << endl;
}
}
int main()
{
memset(h, -1, sizeof h);
int n; cin >> n;
for(int i = 1; i <= n; ++i)
{
int a, b, c; cin >> a >>b >> c;
add(a, b, c); add(b, a, c);
}
dfs_d(1, -1);
dfs_u(1, -1);
int res = 0x3f3f3f3f;
// cout << n << endl;
for(int i = 1; i <= n; ++i)
{
// cout << d1[i] << " " << d2[i] << " " << up[i] << endl;
res = min(res, max(up[i], d1[i]));
}
cout << res << endl;
return 0;
}