static void Main(string[] args) { var sets = new DisjointSets <int>(); var edges = new SortedDictionary <Tuple <int, int, int>, Tuple <int, int> >(); var mn = Console.ReadLine().Split(' ').Select(int.Parse).ToArray(); var k = 0; for (int i = 0; i < mn[1]; ++i) { var xyr = Console.ReadLine().Split(' ').Select(int.Parse).ToArray(); edges.Add(Tuple.Create(xyr[2], xyr[0] + xyr[1] + xyr[2], k++), Tuple.Create(xyr[0], xyr[1])); } var w = 0; foreach (var e in edges) { var xs = sets.MakeSet(e.Value.Item1); var ys = sets.MakeSet(e.Value.Item2); if (xs != ys) // Not yet connected { w += e.Key.Item1; sets.Union(xs, ys); } } Console.WriteLine(w); }
public Node(DisjointSets <T> owner, T value) { this.owner = owner; this.value = value; this.parent = this; this.rank = 0; this.count = 1; }