rose.cpp
#include <cstdlib>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <climits>
#include <iostream>
using namespace std;
struct Node{
Node(){visited=false;}
bool visited;
vector<int> edges;
vector<int> egeval;
};
int n,cn;
vector<Node> nodes;
int solve(int n, int eval){
//cout << n << " " << eval << endl;
nodes[n].visited = true;
int alt = 0;
int cc = 0;
for( int i = 0; i < nodes[n].edges.size(); i++ ){
if(!nodes[nodes[n].edges[i]].visited){
alt+=solve(nodes[n].edges[i],nodes[n].egeval[i]);
cc++;}
}
if(!cc)return eval;
//cout << "alt " << alt << endl;
return min(eval,alt);
}
int main(int argc, char * argv[]){
int a,b,c;
while(scanf("%d %d",&n,&cn)==2){
nodes.resize(0);
nodes.resize(n);
cn--;
for( int i = 0; i < (n-1); i++ ){
scanf("%d%d%d",&a,&b,&c);
a--;b--;
nodes[a].edges.push_back(b);
nodes[b].edges.push_back(a);
nodes[a].egeval.push_back(c);
nodes[b].egeval.push_back(c);
}
printf("%d\n",solve(cn,INT_MAX));
}
return 0;
}