fr.cpp
#include <algorithm>
#include <cmath>
#include<cstdio>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#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 FORD(i,a,b) for ( int i = (a); i>= (b); i-- )
#define DEBUG(x) cerr << ">>> " << #x << " : " << x << endl;
int ** costs;
int ** sib;
int sibCnt[1024];
int visited[1024];
int central;
int n1,n2,cost,nodeCnt;
int dfs(int node, int prev) {
if (sibCnt[node] == 1) return costs[prev][node];
int sum = 0;
REP(i,sibCnt[node]) if ( sib[node][i] != prev ) sum += dfs(sib[node][i],node);
return min(sum, costs[prev][node]);
}
int solve() {
int sum = 0;
REP(i,sibCnt[central]) sum += dfs(sib[central][i],central);
return sum;
}
int main() {
costs = new int * [1024];
sib = new int * [1024];
REP(i,1024) {
costs[i] = new int [1024];
sib[i] = new int [1024];
}
while (scanf("%d%d",&nodeCnt,¢ral) == 2) {
REP(i,1024) sibCnt[i] = 0;
REP(i,nodeCnt-1) {
scanf("%d%d%d",&n1,&n2,&cost);
sib[n1][sibCnt[n1]++] = n2;
sib[n2][sibCnt[n2]++] = n1;
costs[n1][n2] = costs[n2][n1] = cost;
}
cout << solve() << endl;
}
return 0;
}