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); }
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); }
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); }