Exemple #1
0
        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);
        }
Exemple #2
0
 public Node(DisjointSets <T> owner, T value)
 {
     this.owner  = owner;
     this.value  = value;
     this.parent = this;
     this.rank   = 0;
     this.count  = 1;
 }