Advertisement
saske_7

mst.cpp

Nov 3rd, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.51 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std ;
  4.  
  5. #define M 500000
  6. #define pf printf
  7. #define sf scanf
  8. #define pb push_back
  9. #define sf2(a, b) scanf("%d%d",&a ,&b)
  10. #define rep(i,n) for(i = 0 ; i< n ;i++ )
  11.  
  12. int arr[M] ;
  13. int nodes ;
  14.  
  15. struct street{
  16. int u , v , w ;
  17.  
  18. }var[M];
  19. vector<street> roads;
  20.  
  21. bool comp(street a , street b ){
  22.     return a.w < b.w ;
  23.  
  24. }
  25.  
  26. int find(int i){
  27.     if(arr[i] ==  i ) return i ;
  28.     else{
  29.         arr[i]  = find(arr[i] );
  30.         return arr[i] ;
  31.     }
  32. }
  33.  
  34. void make(int a , int b ){
  35.     int u = find(a );
  36.     int v = find(b );
  37.     if(u != v ) arr[u] =  v ;
  38.  
  39. }
  40.  
  41. int mst(void){
  42. int i , j, k, sum;
  43. rep(i, nodes) arr[i] =  i ;
  44.  
  45.     sum =  roads[0].w ;
  46.     make(roads[0].u , roads[0].v);
  47.  
  48.     for(i = 1 ; i < roads.size() ;i++)
  49.     {
  50.     if(find(arr[roads[i].u]  ) != find(arr[roads[i].v]) )
  51.         {
  52.             sum +=  roads[i].w ;
  53.             make(roads[i].u ,  roads[i].v);
  54.         }
  55.  
  56.  
  57.     }
  58.  
  59. return sum ;
  60. }
  61.  
  62. int main(){
  63.     freopen("in.txt" , "r" , stdin );
  64.  
  65. int i , j , n  ,k;
  66. while(scanf("%d%d",&n ,&k )){
  67.     if(n+ k == 0) break ;
  68.  
  69.         nodes = n ;
  70.         roads.clear() ;
  71.         int sum = 0;
  72.         for(i =0 ;i < k; i++){
  73.             int u , v ,w ;
  74.             scanf("%d%d%d",&u,&v ,&w );
  75.             var[i].u =  u ;
  76.             var[i].v =  v ;
  77.             var[i].w =  w ;
  78.             sum +=  w ;
  79.         roads.push_back(var[i]);
  80.         }
  81.  
  82.     sort(roads.begin() ,roads.end(), comp);
  83.  
  84.  k = mst();
  85. pf("%d\n",sum-k);
  86. }
  87. return 0;}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement