Fr.java
import java.util.*;
import java.io.*;
public class Fr
{
public static HashMap
<String, Node
> nodes
= new HashMap
<String, Node
>();
public static class Node
{
public ArrayList<Edge> edges;
public Node()
{
edges = new ArrayList<Edge>();
}
public int minCost() {return minCost(null);}
public int minCost(Edge parent)
{
if (edges.size() == 1)
{
return edges.get(0).cost;
}
int sum = 0;
for (Edge e : edges)
{
if (parent == null || !e.equals(parent))
sum += e.getOther(this).minCost(e);
}
if (parent == null)
return sum;
if (parent.cost < sum)
return parent.cost;
return sum;
}
}
public static class Edge
{
public Node n1;
public Node n2;
public int cost;
public Edge(Node n1, Node n2, int cost)
{
this.n1 = n1;
this.n2 = n2;
this.cost = cost;
}
public Node getOther(Node me)
{
if (n1.equals(me))
return n2;
return n1;
}
}
{
while (true)
{
try
{
thing(in);
}
{
break;
}
}
}
{
String[] splitline
= line.
split(" "); for (int i = 1; i <= n; i++)
nodes.
put(String.
valueOf(i
),
new Node
()); for (int i = 0; i < n-1; i++)
{
line = in.readLine();
splitline = line.split(" ");
Node n1 = nodes.get(splitline[0]);
Node n2 = nodes.get(splitline[1]);
Edge e
= new Edge
(n1, n2,
Integer.
valueOf(splitline
[2])); n1.edges.add(e);
n2.edges.add(e);
}
System.
out.
println(nodes.
get(start
).
minCost()); }
}