Esempio n. 1
0
        public long Run()
        {
            var L = new List <Tuple <int, int, long> >();

            for (int i = 0; i < I; ++i)
            {
                foreach (var t in Adj[i])
                {
                    L.Add(Tuple.Create(i, t.Item1, t.Item2));
                }
            }
            L = L.OrderBy(t => t.Item3).ToList();
            var uf = new UnionFind();

            uf.Init(V); long ret = 0;
            foreach (var t in L)
            {
                if (!uf.Find(t.Item1, t.Item2))
                {
                    ret += t.Item3;
                    uf.Unite(t.Item1, t.Item2);
                }
            }
            return(ret);
        }
Esempio n. 2
0
        public long Run()
        {
            var uf = new UnionFind(); var ret = 0L; var L = new List <Tuple <int, int, long> >(); uf.Init(V);

            for (int i = 0; i < I; ++i)
            {
                for (int j = 0; j < Adj[i].Count; ++i)
                {
                    L.Add(Tuple.Create(i, Adj[i][j].to, Adj[i][j].cost));
                }
            }
            L = L.OrderBy(t => t.Item3).ToList();
            for (int i = 0; i < L.Count; ++i)
            {
                if (!uf.Find(L[i].Item1, L[i].Item2))
                {
                    ret += L[i].Item3; uf.Unite(L[i].Item1, L[i].Item2);
                }
            }
            return(ret);
        }