Advertisement
saske_7

uva_11733.cpp

Nov 10th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.62 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std ;
  3.  
  4.  
  5. #define M 500000
  6. #define pii pair<int , int >
  7. #define mp make_pair
  8. #define pf printf
  9. #define sf scanf
  10. #define sf1(a ) scanf("%d",&a)
  11. #define pb push_back
  12. #define sf2(a, b) scanf("%d%d",&a ,&b)
  13. #define rep(i,n) for(i = 1 ; i<= n ;i++ )
  14.  
  15. int par[M] ,  num ;
  16.  
  17. struct vertex {
  18.     int u  , v , w ;
  19.  
  20. };
  21.  
  22. vector <vertex >node;
  23. bool comp(vertex p , vertex q ){
  24.     return p.w < q.w ;
  25.  
  26. }
  27.  
  28. int find(int a ){
  29.     if(par[a ] ==  a ) return a ;
  30.     else return par[a ] =  find(par[a ]);
  31.  
  32. }
  33.  
  34. void make(int a , int b ){
  35.     int u = find(a );
  36.     int v = find(b);
  37.     if(u != v ) par[u] =  v ;
  38.  
  39. }
  40. int cat ;
  41.  
  42. int mst(int range){
  43.     int i , j ,k ;
  44.     rep(i , num + 5) par[i] = i ;
  45.     sort(node.begin() , node.end() , comp);
  46.     int cost =  0 , count = 0;
  47.  
  48.     for(i = 0 ; i < node.size() ; i++){
  49.         if(find(node[i].u ) != find(node[i].v ) && node[i].w < range  )
  50.         {
  51.         ///*
  52.             //*/
  53.             make(node[i].u , node[i].v );
  54.             cost += node[i].w ;
  55.  
  56.         }
  57.  
  58.     }
  59. cat =  count ;
  60.     return cost;
  61. }
  62.  
  63.  
  64. int main(){
  65. //    freopen("in.txt","r",stdin);
  66.   //  freopen("out.txt","w",stdout);
  67.  
  68.     int i , j ,k ,tc , print =  0;
  69.     int n , ed , cs = 0;
  70.     scanf("%d",&tc);
  71.     while(tc--)
  72.     {
  73.  
  74.  
  75.         int cost ;
  76.         scanf("%d%d%d",&n ,&ed ,&cost);
  77.         num = n ;
  78.         node.clear();
  79.  
  80.         while(ed--){
  81.             vertex var ;
  82.             scanf("%d%d%d",&var.u , &var.v , &var.w );
  83.             node.pb(var);
  84.  
  85.         }
  86.  
  87.         k = mst(cost );
  88.  
  89.     map<int , int > m;
  90.     int count =0;
  91.  
  92.     rep(i, num ) {
  93.         int x =  find(i);
  94.         if( m.find(x) == m.end()){
  95.             m[x ] =  1;
  96.             count++;
  97.         }
  98.     }
  99.  
  100.     pf("Case #%d: %d %d\n",++cs, k+ count*cost , count);
  101.  
  102.     }
  103.     return 0 ;
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement