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