//#include #include #include #include #include #include #include #include #include #include #include using namespace std; struct UnionFind{ vector par; //par[i] : iの親の番号 vector rnk; //root[i] : iの木のランク //コンストラクタ UnionFind(long long int n): par(n), rnk(n){ //木の初期化 for(long long int i = 0; i < n; i++){ par[i] = i; rnk[i] = 1; } } //データxが属する木の根を再帰で取得 long long int root(long long int x){ if(par[x] == x){ return x; }else{ return par[x] = root(par[x]); } } //xとyが同じ木に属しているかを判定 bool same(long long int x, long long int y){ return root(x) == root(y); } //xとyの木を併合 void unite(long long int x, long long int y){ long long int rx = root(x); //xの根 long long int ry = root(y); //yの根 if(rx == ry) return; //根が同じならそのまま if(rnk[rx] < rnk[ry]){ par[rx] = ry; }else{ par[ry] =rx; if(rnk[rx] == rnk[ry]) rnk[rx]++; } } }; int main(){ long long i, j, n, m, k, from, to, cost, a1, a2, a3; cin >> n >> m >> k; UnionFind uf(n); vector > > tmp_p(m); vector > > p(0); long long used[m]; long long sumcost = 0; long long ans = 0; for(i=0;i> from >> to >> cost; tmp_p[i] = make_pair(cost, make_pair(from-1, to-1)); sumcost += cost; } for(i=0;i> a1; //cout << a1 << endl; used[a1-1] = 1; } for(i=0;i