Advertisement
jeffersontuc

MST

Oct 31st, 2014
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.47 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <vector>
  4. #include <string>
  5. #include <cmath>
  6. #include <cstring>
  7. #include <algorithm>
  8.  
  9.  
  10. using namespace std;
  11.  
  12. int findd(int x, int parent[]){
  13.     if(x == parent[x]) return x;
  14.     return parent[x] = findd(parent[x], parent);
  15. }
  16.  
  17. void join(int x, int y, int parent[], int sizee[]){
  18.     int fx = findd(x, parent), fy = findd(y, parent);
  19.     if(fx == fy)return;
  20.  
  21.     if(sizee[fx] > sizee[fy]){
  22.         join(y, x, parent, sizee);
  23.         return;
  24.     }
  25.  
  26.     sizee[fy] += sizee[fx];
  27.     parent[fx] = fy;
  28. }
  29.  
  30. int main(){
  31.     int M, N, x, y, z, parent[M], sizee[M], i = 0;
  32.  
  33.     cin >> M >> N;
  34.  
  35.     while(M != 0 || N != 0){
  36.         for(int i = 0; i < M; i++){
  37.             parent[i] = i;
  38.             sizee[i] = 1;
  39.         }
  40.  
  41.         vector<pair<int, pair<int, int> > > edges;
  42.  
  43.         for(int j = 0; j < N; ++j){
  44.             cin >> x >> y >> z;
  45.             edges.push_back(make_pair(z, make_pair(x, y)));
  46.         }
  47.  
  48.         sort(edges.begin(), edges.end());
  49.  
  50.         int sum = 0;
  51.  
  52.         for(int i = 0; i < M; ++i){
  53.             int a = edges[i].second.first;
  54.             int b = edges[i].second.second;
  55.             int w = edges[i].first;
  56.             int fa = findd(a, parent);
  57.             int fb = findd(b, parent);
  58.  
  59.             if(fa == fb) continue;
  60.  
  61.             join(a, b, parent, sizee);
  62.             sum += w;
  63.         }
  64.  
  65.         cout << sum << endl;
  66.         cin >> M >> N;
  67.     }
  68.  
  69.  
  70.     return 0;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement