#include <bits/stdc++.h>

using namespace std;

#define MAXN 200001

int deg[MAXN];
vector<pair<int,int>> adj[MAXN];
long long dp[MAXN];

void dfs(int node,int pret)
{
    if ((int)adj[node].size()==1) return;
    for (pair<int,int> edge:adj[node])
    {
        int sled=edge.first,w=edge.second;
        if (sled==pret) continue;
        dfs(sled,node);dp[node]=max(dp[node],dp[sled]+w);
    }
}

long long newdp[2][MAXN];
long long kandidat=0;

void newdfs(int node,int pret)
{
    if ((int)adj[node].size()==1) return;
    for (pair<int,int> edge:adj[node])
    {
        int sled=edge.first,w=edge.second;
        if (sled==pret) continue;
        newdfs(sled,node);long long value=newdp[0][sled]+w;
        if (value>=newdp[0][node]) {newdp[1][node]=newdp[0][node];newdp[0][node]=value;}
        else newdp[1][node]=value;
    }
}

void reroot(int node,int pret)
{
    if ((int)adj[node].size()>=3)
    {
        long long max1=0,max2=0,max3=0;
        for (pair<int,int> edge:adj[node])
        {
            int sled=edge.first,w=edge.second;
            if (newdp[0][sled]+w>=max1) {max3=max2;max2=max1;max1=newdp[0][sled]+w;}
            else if (newdp[0][sled]+w>=max2) {max3=max2;max2=newdp[0][sled]+w;}
            else if (newdp[0][sled]+w>max3) max3=newdp[0][sled]+w;
        }
        kandidat=max(kandidat,max1+max2+max3);
    }
    for (pair<int,int> edge:adj[node])
    {
        int sled=edge.first,w=edge.second;if (sled==pret) continue;
        long long value=newdp[0][sled]+w;pair<long long,long long> pamtinode={newdp[0][node],newdp[1][node]};
        if (value==newdp[0][node]) newdp[0][node]=newdp[1][node];
        pair<long long,long long> pamtisled={newdp[0][sled],newdp[1][sled]};
        if (newdp[0][node]+w>=newdp[0][sled]) {newdp[1][sled]=newdp[0][sled];newdp[0][sled]=newdp[0][node]+w;}
        else if (newdp[0][node]+w>newdp[1][sled]) newdp[1][sled]=newdp[0][node]+w;
        reroot(sled,node);newdp[0][node]=pamtinode.first;newdp[1][node]=pamtinode.second;newdp[0][sled]=pamtisled.first;newdp[1][sled]=pamtisled.second;
    }
}