Problem:
Diameter of a Tree

Given a tree T with non-negative weight, find the diameter of the tree.

The diameter of a tree is the maximum distance between two nodes in a tree.

Input

n
s1 t1 w1
s2 t2 w2
:
sn-1 tn-1 wn-1

The first line consists of an integer n which represents the number of nodes in the tree. Every node has a unique ID from 0 to n-1 respectively.

In the following n-1 lines, edges of the tree are given.

si and ti represent end-points of the i-th edge (undirected) and wi represents the weight (distance) of the i-th edge.

Output

Print the diameter of the tree in a line.

Constraints

1 ≤ n ≤ 100,000

0 ≤ wi ≤ 1,000

Sample Input 1

4
0 1 2
1 2 1
1 3 3

Sample Output 1

5

Sample Input 2

4
0 1 1
1 2 2
2 3 4

Sample Output 2

7

Solution in C++ (judge verdict: Accepted)

/*
	f(v, d, d1):- d = d + w(P[v], v), d1

*/
#include <bits/stdc++.h>

using namespace std;
const int maxv = 100001;
vector< pair<int, int> > A[maxv], T[maxv];
int P[maxv], solve;
int a, b, c, N, root;


inline void tree_build( int v, int parent ){

	vector< pair<int, int> >::iterator x = A[v].begin();

	for( ; x != A[v].end(); ++x ){
	    if( x->first == parent )
	    	continue;
		T[v].push_back( *x ),
		tree_build( x->first, v );
	}
}

inline void sol( int v, int &len ){

    vector< pair<int, int> >::iterator x = T[v].begin();

    int tplen = 0;
    int ch1 = 0;
    int ch2 = 0;
    for( ; x != T[v].end(); ++x ){
		tplen = x->second;
		sol( x->first, tplen );
		if( ch1 <= tplen ){
			ch2 = ch1;
			ch1 = tplen;
		}else
		if( ch2 < tplen )
			ch2 = tplen;
	}

	solve = max( solve, ch1 + ch2 );
	len += ch1;
}

int main( void ){

	//freopen("input.in", "r", stdin);
	scanf( "%d", &N );

	for( int i = 1; i < N; ++i )
		scanf( "%d%d%d", &a, &b, &c ), 
		++a, 
		++b,
		P[b] = a,
		A[a].push_back( make_pair( b, c ) ),
		A[b].push_back( make_pair( a, c ) );


	for( int i = 1; i <=N && !root; ++i )
		root = ( !P[i] )?i:root;	

	tree_build( root, 0 );
	int len = 0;
	sol( root, len );

	printf("%d\n", solve);

	return 0;
}