fr.cpp
#include <bits/stdc++.h>
using namespace std;
int dfs(int c, int f, int s, const vector < vector < pair <int, int> > > &g, vector <int> &mem) {
if ( mem[c] != -1 )
return mem[c];
int n = 0;
for ( size_t i = 0; i < g[c].size(); ++i ) {
if ( f == g[c][i].first )
continue;
n += dfs(g[c][i].first, c, g[c][i].second, g, mem);
}
if ( n == 0 )
mem[c] = s;
else
mem[c] = min(n, s);
return mem[c];
}
int main() {
int n, c;
while ( scanf("%d %d", &n, &c) == 2 ) {
--c;
vector < vector < pair <int, int> > > g(n);
vector <int> mem(n, -1);
for ( int i = 0; i < n-1; ++i ) {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
--a; --b;
g[a].push_back(make_pair(b, c));
g[b].push_back(make_pair(a, c));
}
int p = dfs(c, -1, INT_MAX, g, mem);
printf("%d\n", p);
}
return 0;
}