fr.cpp
#include <iostream>
#include <set>
#include <stdio.h>
#include <utility>
#include <map>
#include <string>
#include <sstream>
#include <algorithm>
#include <vector>
using namespace std;
int dfs(const vector<vector<int> > & G, const vector<vector<int> > & eff, int node, int parEff, int parent){
int e = 0;
if(G[node].size() == 1){
return parEff;
}
for(int i=0; i<G[node].size(); ++i){
if(G[node][i] != parent){
e += dfs(G, eff, G[node][i], eff[node][i], node);
}
}
return min(e, parEff);
}
int solve(const vector<vector<int> > & G, const vector<vector<int> > & eff, int root){
int e = 0;
for(int i=0; i<G[root].size(); ++i){
e += dfs(G, eff, G[root][i], eff[root][i], root);
}
return e;
}
int main(){
int n, root;
while(cin >> n >> root){
vector<vector<int> > G(n+1);
vector<vector<int> > eff(n+1);
for(int i=0; i<n-1; ++i){
int u, v, w;
cin >> u >> v >> w;
G[u].push_back(v);
G[v].push_back(u);
eff[u].push_back(w);
eff[v].push_back(w);
}
cout << solve(G, eff, root) << '\n';
}
return 0;
}