fr.cpp
#include <iostream>
#include <cctype>
#include <cmath>
#include <complex>
#include <cstdio>
#include <string>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <utility>
#include <vector>
using namespace std;
#define DEBUG(x) cout << ">>> " #x << " : " << x << endl;
#define MAX 1E9
map< int, vector< pair< int, int > > > edges;
int dsp( int v, int weight, int parent ) {
if( edges[v].size() == 1 && edges[v][0].first == parent ) return weight;
int sum = 0;
for( size_t i = 0; i < edges[v].size(); i++ ) {
if( edges[v][i].first == parent ) continue;
sum += dsp( edges[v][i].first, edges[v][i].second, v );
}
return (weight < sum) ? weight : sum;
}
int main() {
int n,c;
while( scanf( "%d %d", &n, &c ) == 2 ) {
edges.clear();
for( int i = 1; i < n; i++ ) {
int u,v,w;
scanf( "%d %d %d", &u, &v, &w );
edges[u].push_back( pair<int,int>(v,w) );
edges[v].push_back( pair<int,int>(u,w) );
}
printf( "%d\n", dsp(c,MAX,-1) );
}
return 0;
}