Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdio.h>
- #include <vector>
- #include <string>
- #include <cmath>
- #include <cstring>
- #include <algorithm>
- using namespace std;
- int findd(int x, int parent[]){
- if(x == parent[x]) return x;
- return parent[x] = findd(parent[x], parent);
- }
- void join(int x, int y, int parent[], int sizee[]){
- int fx = findd(x, parent), fy = findd(y, parent);
- if(fx == fy)return;
- if(sizee[fx] > sizee[fy]){
- join(y, x, parent, sizee);
- return;
- }
- sizee[fy] += sizee[fx];
- parent[fx] = fy;
- }
- int main(){
- int M, N, x, y, z, parent[M], sizee[M], i = 0;
- cin >> M >> N;
- while(M != 0 || N != 0){
- for(int i = 0; i < M; i++){
- parent[i] = i;
- sizee[i] = 1;
- }
- vector<pair<int, pair<int, int> > > edges;
- for(int j = 0; j < N; ++j){
- cin >> x >> y >> z;
- edges.push_back(make_pair(z, make_pair(x, y)));
- }
- sort(edges.begin(), edges.end());
- int sum = 0;
- for(int i = 0; i < M; ++i){
- int a = edges[i].second.first;
- int b = edges[i].second.second;
- int w = edges[i].first;
- int fa = findd(a, parent);
- int fb = findd(b, parent);
- if(fa == fb) continue;
- join(a, b, parent, sizee);
- sum += w;
- }
- cout << sum << endl;
- cin >> M >> N;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement