fr.cpp
#include <cstdio>
#include <vector>
#include <iostream>
#include <string>
#include <algorithm>
#include <cstring>
#include <set>
#include <vector>
using namespace std;
struct edge
{
edge(int bb, int cc) { b = bb; w = cc; }
int b, w;
bool operator<(edge const& e) const { return w < e.w; }
};
vector<vector<edge> > v;
int go(int node, int prev)
{
int res = 0;
for (int i = 0; i < v[node].size(); ++i)
if (v[node][i].b != prev)
res += min(v[node][i].w, go(v[node][i].b, node));
// cout << "node " << node << " returned " << res << endl;
return res ? res : 10000000;
}
int main()
{
int n, c;
while (scanf("%d %d\n", &n, &c) > 0)
{
v.clear();
v.resize(n+1);
int u, vv, w;
for (int i = 0; i < n-1; ++i)
{
scanf("%d %d %d", &u, &vv, &w);
v[u].push_back(edge(vv, w));
v[vv].push_back(edge(u, w));
}
printf("%d\n", go(c, 0));
}
return 0;
}