fr.cpp
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<cctype>
#include<climits>
#include<algorithm>
#include<utility>
#include<string>
#include<deque>
#include<list>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<vector>
using namespace std;
#define REP(i,N) for (int i = 0; i < (N); i++)
#define FOR(i,a,b) for (int i = (a); i <= (b); i++)
#define FORI(i,a,b) for (int i = (a); i < (b); i++)
#define FORD(i,a,b) for (int i = (a)-1; i >= (b); i--)
#define DP(arg...) fprintf(stderr, ## arg)
typedef long long ll;
typedef long double ld;
typedef pair<int,int> ii;
ll H[1111][1111];
ll D[1111];
int seen[1111];
int n, c;
vector<int> graf[1111];
ll dfs(int v, int p) {
if (graf[v].size()==1 && v!=c) D[v] = 1000000000000LL;
seen[v] = 1;
REP(i, graf[v].size()) {
int u = graf[v][i];
if (!seen[u]) {
dfs(u, v);
D[v] += min(D[u], H[v][u]);
}
}
return D[v];
}
void solve() {
REP(i, n+5) { graf[i].clear(); seen[i] = 0; D[i] = 0; }
REP(i, n+5) REP(j, n+5) H[i][j] = 0;
REP(i, n-1) {
int u, v, h; scanf("%d%d%d", &u, &v, &h);
graf[u].push_back(v);
graf[v].push_back(u);
H[u][v] = h; H[v][u] = h;
}
printf("%lld\n", dfs(c, 0));
}
int main() {
while (scanf("%d%d", &n, &c) != EOF) {
solve();
}
return 0;
}