Rt,代码如下
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=200005;
int n,m,p,q,cnt;
int dep[maxn],dis1[maxn],dis2[maxn],head[maxn];
struct edge{
int v,val,nxt;
}a[maxn<<1];
inline int read(){
int ret=0,f=1; char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}
while(isdigit(ch)){ret=ret*10+ch-'0';ch=getchar();}
return ret*f;
}
void add(int x,int y,int val){
++cnt;
a[cnt].v =y;
a[cnt].val=val;
a[cnt].nxt=head[x];
head[x]=cnt;
}
void scan(){
int k,j,i;
n=read(); read();
for(k=1;k<n;k++){
int x,y,val;
x=read(); y=read(); val=read();
add(x,y,val); add(y,x,val);
}
}
void dfs(int x,int f){
int k,j,i;
if(dep[x]>dep[m]) m=x;
for(k=head[x];k;k=a[k].nxt){
int v=a[k].v,val=a[k].val;
if(v==f) continue;
dep[v]=dep[x]+val;
dfs(v,x);
}
}
void solve(){
dfs(1,0); p=m; m=0;
memset(dep,0,sizeof(dep));
dfs(p,0); q=m; m=0;
memcpy(dis1,dep,maxn);
memset(dep,0,sizeof(dep));
dfs(q,0);
memcpy(dis2,dep,maxn);
memset(dep,0,sizeof(dep));
}
void print(){
int k,j,i; int ans=0;
for(k=1;k<=n;k++)
ans=max(ans,min(dis1[k],dis2[k]));
ans+=dis1[q];
printf("%lld\n",ans);
}
signed main(){
int k,j,i;
scan(); solve(); print();
return 0;
}