Advertisement
Green_13

კრასკალის ალგორითმი

Feb 22nd, 2013
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.75 KB | None | 0 0
  1. // Green ))
  2. #include<iostream>
  3. #include<stdio.h>
  4. #include<cstdlib>
  5. #include<math.h>
  6. #include<algorithm>
  7. #include<fstream>
  8. #include<string>
  9. #include<queue>
  10. #include<bitset>
  11. #include<stack>
  12. #include <cstdio>
  13. #include <iomanip>
  14. #include <cstdlib>
  15. #include <cmath>
  16. #include <vector>
  17. #include <set>
  18. #include <map>
  19. #include <deque>
  20. #include <list>
  21. #include <cstring>
  22. #include <cassert>
  23. #include <ctime>
  24. #include <complex>
  25. #define PI 3.141592653589793
  26. #define INF 1000000
  27. using namespace std;
  28. int x,y,r[200000],s=0;
  29. long long n,m,i,j;
  30. int p[2000000];
  31. struct name{
  32.        int x;
  33.        int y;
  34.        int z;};
  35. name q;
  36. vector <name> a;
  37. bool func(name g,name f){
  38.         return (g.z>f.z);
  39. }
  40. void make_set(int v){
  41.      p[v]=v;
  42.      r[v]=0;}
  43. int find_set(int v){
  44.     if (p[v]==v)
  45.                 return v;
  46.     return find_set(p[v]);}
  47. void union_set(int v,int t){
  48.      v=find_set(v);
  49.      t=find_set(t);
  50.      if (v!=t){
  51.                if (r[v]>r[t]) swap(v,t);
  52.                p[v]=t;
  53.                if (r[v]==r[t]) r[t]++;}}                    
  54. int main() {
  55.     freopen("input.txt","r",stdin);
  56.     freopen("output.txt","w",stdout);
  57.     cin>>n>>m;
  58.     for (i=1;i<=n;i++){
  59.       make_set(i);
  60.       r[i]=0;}
  61.     for (i=1;i<=m;i++){
  62.       cin>>q.x>>q.y>>q.z;
  63.       a.push_back(q);
  64.     }  
  65.     sort(a.begin(),a.end(),func);
  66.     j=1;
  67.     x=0;
  68.     y=0;
  69.     long long s=0;
  70.     while (a.size()>0){
  71.        q=a[a.size()-1];
  72.                   if (find_set(q.x)==find_set(q.y))                      
  73.                                 a.pop_back();
  74.                  
  75.                   else{        
  76.                         s=s+q.z;
  77.                         union_set(q.x,q.y);
  78.                         }    
  79.     }
  80.     cout<<s;
  81. return 0;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement