fr.cpp
#include <vector>
#include <list>
#include <map>
#include <set>
#include <algorithm>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <string>
#define vi vector <int>
#define vl vector <long long>
#define vpii vector <pair <int,int> >
#define mp(x,y) make_pair(x,y)
#define all(x) (x).begin(),(x).end()
#define sz(x) (int)(x).size()
#define FOR(i,n) for(ll i=0;i<int(n);i++)
#define READ(v,n) {FOR(i,n){ll x;cin>>x;v.pb(x);} }
#define gmin(a,b) {if (b<a) a=b;}
#define gmax(a,b) {if (b>a) a=b;}
#define pb push_back
#define ppb pop_back
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
int n, c;
int a[1000000];
int opt(int x, int from) {
int v= 0;
bool leaf = true;
for (int i= 0; i < n; ++i) {
if (i != from) {
if (a[x*n + i] > 0){
leaf = false;
v += opt(i, x);
}
}
}
if (from > -1) {
if (a[x*n + from] < v) return a[x*n + from];
if (leaf) return a[x*n + from];
}
return v;
}
int main(){
int x, y, v;
while (cin >> n>>c){
for (int i= 0; i < n*n; ++i) a[i] = 0;
for (int i = 0; i < n-1; ++i) {
cin >> x>>y>>v;
a[(x-1)*n + (y-1)] = v;
a[(y-1)*n + (x-1)] = v;
}
cout << opt(c-1, -1)<<endl;
}
return 0;
}