Example #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.Same(t.Item1, t.Item2))
                {
                    ret += t.Item3;
                    uf.Unite(t.Item1, t.Item2);
                }
            }
            return(ret);
        }
Example #2
0
    class Kruskal : ShortestPath {//TODO:test,
        public long Run()
        {
            var L = Adj.Select((l, i) => Tuple.Create(i, l[i].Item1, l[i].Item2)).OrderBy(t => t.Item3).ToList();
            //var li = new List<Tuple<int, int, long>>();
            //I.REP(i =>{ foreach (var t in Adj[i]) li.Add(Tuple.Create(i, t.Item1, t.Item2));});
            //li = li.OrderBy(t => t.Item3).ToList();//li = li.OrderByDescending(t => t.Item3).ToList();
            var uf = new UnionFind(); uf.Init(V); long ret = 0;

            foreach (var t in L)
            {
                if (!uf.Same(t.Item1, t.Item2))
                {
                    ret += t.Item3; uf.Unite(t.Item1, t.Item2);
                }
            }
            return(ret);
        }
Example #3
0
    class Kruskal : ShortestPath {//TODO:test
        public long Run()
        {
            var li = new List <Tuple <int, int, long> >();

            I.REP(i => { foreach (var t in Adj[i])
                         {
                             li.Add(Tuple.Create(i, t.Item1, t.Item2));
                         }
                  });
            li = li.OrderBy(t => t.Item3).ToList();
            var uf = new UnionFind(); uf.Init(V); long ret = 0;

            foreach (var t in li)
            {
                if (!uf.Same(t.Item1, t.Item2))
                {
                    ret += t.Item3; uf.Unite(t.Item1, t.Item2);
                }
            }
            return(ret);
        }