树上两点最远距离
#include <bits/stdc++.h>
using namespace std;
const int bsz=1<<18;
char bf[bsz], *head, *tail;
inline char gc(){
if(head==tail){
int l=fread(bf,1,bsz,stdin); tail=(head=bf)+l;}
return *head++;
}
inline which read(){
which x=0,f=1; char c=gc();
for(;!isdigit(c);c=gc()){
if(c=='-') f=-1;}
for(;isdigit(c);c=gc()) x=x*10+c-'0';
return x*f;
}
inline void write(which x){
if(x>=10) write(x/10); putchar(x%10+'0');}
struct node{
int id, val; node(int a,int b): id(a), val(b){
}};
vector<node> G[100010];
bool vis[100010];
int n, duan, sum, tmax, des;
inline void dfs(int pre, int cur, int val){
vis[cur]=1;
if(pre^-1){
sum+=val; if(tmax<sum) tmax=sum, des=cur;
}
for(int i=0;i<G[cur].size();++i){
node t=G[cur][i];
if(!vis[t.id]) dfs(cur,t.id,t.val);
}
vis[cur]=0, sum-=val;
}
int main(){
n=read();
for(int a, b, c, i=1;i<n;++i) a=read(), b=read(), c=read(), G[a].push_back(node(b,c)), G[b].push_back(node(a,c));
dfs(-1,1,0), dfs(-1,des,0);
printf("%d\n",tmax);
return 0;
}