fr.cpp
#include <iostream>
#include <vector>
#include <cstdio>
#include <cmath>
#include <set>
#include <map>
#include <string>
#define MAX(a,b) ((a)>(b)?(a):(b))
#define MIN(a,b) ((a)<(b)?(a):(b))
using namespace std;
typedef struct
{
int y;
int e;
} edge;
vector< vector<edge> > G;
bool marked[1002];
int dfs(int v)
{
marked[v] = true;
int effort = 0;
for(int i=0; i<G[v].size(); i++)
{
edge e = G[v][i];
if(marked[e.y])
continue;
int eff = dfs(e.y);
eff = MIN(e.e, eff);
effort += eff;
}
if(effort == 0)
return 9000000;
return effort;
}
int main()
{
int n, c;
while(scanf("%d %d", &n, &c) == 2)
{
vector<edge> p;
G = vector< vector<edge> >(n+1,p);
for(int i=0; i<n+1; i++)
marked[i] = false;
for(int i=0; i<n-1; i++)
{
int x, y;
edge e;
scanf("%d %d %d", &x, &y, &e.e);
e.y = y;
G[x].push_back(e);
e.y = x;
G[y].push_back(e);
}
printf("%d\n", dfs(c));
}
return 0;
}