fr.cpp
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <string>
#include <map>
#include <vector>
int i, j, k;
int i2, j2, k2;
int count, central;
struct vertex
{
std::vector<int> next;
std::vector<int> price;
bool washere;
vertex()
{
washere = false;
}
};
std::vector<vertex> v;
int go(int index)
{
if (v[index].washere)
return 0x7FFFFFFF;
v[index].washere = true;
int adjc = v[index].next.size();
int price = 0;
bool ok = false;
for (int i = 0; i < adjc; i++)
if (!v[v[index].next[i]].washere)
{
/*printf(">%d %d %d\n", index, v[index].next[i], adjc);*/
price += std::min(v[index].price[i], go(v[index].next[i]));
ok = true;
}
if (!ok)
return 0x7FFFFFFF;
/*printf("-- %d %d\n", index, price);*/
return price;
}
/* ------------------------------- */
int main()
{
while (scanf("%d%d", &count, ¢ral) == 2)
{
v.clear();
v.resize(count + 1);
for (i = 0; i < count-1; i++)
{
/*printf("%d..\n", i);*/
int w;
scanf("%d%d%d", &j, &k, &w);
/*printf("%d %d %d..\n", j, k, w);*/
v[j].next.push_back(k);
v[j].price.push_back(w);
v[k].next.push_back(j);
v[k].price.push_back(w);
}
printf("%d\n", go(central));
}
return 0;
}