static void Main(String[] args) { var mn = Console.ReadLine().Split(' ').Select(int.Parse).ToArray(); var g = new Dictionary <int, List <Edge> >(); for (int i = 0; i < mn[1]; ++i) { var xyr = Console.ReadLine().Split(' ').Select(int.Parse).ToArray(); List <Edge> eds; if (!g.TryGetValue(xyr[0], out eds)) { eds = new List <Edge>(); g.Add(xyr[0], eds); } eds.Add(new Edge(xyr[0], xyr[1], xyr[2])); if (!g.TryGetValue(xyr[1], out eds)) { eds = new List <Edge>(); g.Add(xyr[1], eds); } eds.Add(new Edge(xyr[1], xyr[0], xyr[2])); } var first = int.Parse(Console.ReadLine()); int sum = 0; foreach (var edge in Prims.BuildMinimumSpanningTree(first, new DictionaryGraph(g))) { sum += edge.weight; } Console.WriteLine(sum); }