fr.cpp
#include <cstdio>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <limits.h>
#include <map>
#include <queue>
#include <vector>
#include <set>
#include <stack>
#include <bitset>
#include <string>
using namespace std;
typedef pair<int,int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef set<int> si;
typedef set<ii> sii;
#define MP make_pair
#define PB push_back
#define REP(i,a) for ( int i = 0; i < int(a); i++)
#define FOR(i,a,b) for ( int i = int(a); i<=int(b); i++)
#define FORD(i,a,b) for(int i= int(a); i>=int(b); i--)
const int INF = 1<<29;
typedef long long int ll;
struct node
{
bool visited;
int parent;
vii adj;
} nodes[1001];
int dfs( int v, int cap )
{
//printf("node%d %d\n", v, cap);
nodes[v].visited = true;
int sum = 0;
FOR( i, 0, nodes[v].adj.size( )-1 )
{
if ( !nodes[ nodes[v].adj[i].first ].visited )
sum += dfs( nodes[v].adj[i].first, nodes[v].adj[i].second );
}
if ( sum == 0 )
return cap;
return sum;
}
int main()
{
int n, c, u, v, w;
while ( scanf("%d%d", &n, &c) == 2 )
{
FOR( i, 1, n )
{
nodes[i].parent = 0;
nodes[i].visited = false;
nodes[i].adj.clear( );
}
FOR( i, 1, n-1 )
{
scanf("%d%d%d", &u, &v, &w);
nodes[u].adj.PB( MP( v, w ) );
nodes[v].adj.PB( MP( u, w ) );
}
printf("%d\n", dfs( c, INT_MAX ));
}
return 0;
}