Advertisement
saske_7

uva_11228.cpp

Nov 5th, 2017
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.97 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std ;
  4.  
  5. #define M 1000000
  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 = 0 ; i< n ;i++ )
  14.  
  15. struct nd
  16. {
  17.     int x, y ;
  18.  
  19. };
  20.  
  21. struct ed
  22. {
  23.     int p,q ;
  24.     double dis ;
  25.  
  26. };
  27.  
  28. int num, arr[M];
  29.  
  30. bool comp(ed p, ed q )
  31. {
  32.     return p.dis < q.dis;
  33.  
  34. }
  35.  
  36. vector<ed > edges;
  37. vector<nd> node ;
  38.  
  39. int find(int a)
  40. {
  41.     if(arr[a ] == a ) return a ;
  42.     else
  43.         return arr[a ] =  find(arr[a]);
  44. }
  45.  
  46. void make(int a, int b )
  47. {
  48.     int u =  find(a );
  49.     int v =  find(b );
  50.     if(u != v )arr[u] =  arr[v];
  51.  
  52.  
  53.  
  54. }
  55. double states,roads, rails ;
  56. void mst(int hold )
  57. {
  58.     int i, j,k ;
  59.     rep(i, num ) arr[i] =  i ;
  60.     double rd, rl ;
  61.     rd = rl =  0 ;
  62.     int count =  0;
  63.  
  64.     for( i  = 0 ; i < edges.size() ; i++)
  65.     {
  66.         if(find(edges[i].p ) != find(edges[i].q) )
  67.         {
  68.             //       pf("herr %d %d %lf\n",edges[i].p , edges[i].q ,edges[i].dis );
  69.             if(edges[i].dis > hold )
  70.             {
  71.  
  72.                 count++;
  73.                 rl+= edges[i].dis ;
  74.             }
  75.             else
  76.             {
  77.                 rd+= edges[i].dis ;
  78.             }
  79.             make(edges[i].p,edges[i].q);
  80.         }
  81.     }
  82.  
  83.     roads =   rd;
  84.     rails =  rl ;
  85.     states = count + 1 ;
  86.  
  87. }
  88. int _round(double d)
  89. {
  90.     if (d < 0)
  91.     {
  92.         return (int)(d - 0.5);
  93.     }
  94.     return (int)(d + 0.5);
  95. }
  96.  
  97. int main()
  98. {
  99.  
  100.     // freopen("in.txt","r" , stdin );
  101.     // freopen("out.txt","w" , stdout );
  102.  
  103.     int i, j,k,tc, cs = 0 ;
  104.     sf1(tc );
  105.     int nodes, hold ;
  106.     while(scanf("%d%d",&nodes,&hold )==2)
  107.     {
  108.         node.clear();
  109.         edges.clear();
  110.         num =  nodes ;
  111.         while(nodes--)
  112.         {
  113.             nd  var;
  114.             int a, b ;
  115.             sf2(a, b);
  116.             var.x  = a;
  117.             var.y  = b;
  118.             node.pb(var );
  119.  
  120.         }
  121.         for(i = 0 ; i< node.size()-1 ; i++)
  122.         {
  123.             for(j =  i+1 ; j< node.size(); j++)
  124.             {
  125.                 nd var ;
  126.                 int a, b,c,d;
  127.                 a =  node[i].x ;
  128.                 b =  node[i].y ;
  129.  
  130.                 c =  node[j].x ;
  131.                 d =  node[j].y  ;
  132.  
  133.                 double dist ;
  134.                 dist = (double )sqrt((a-c)*(a-c) + (b-d)*(b-d) );
  135.                 //pf("%d %d %d %d dist %lf\n",a, b ,c ,d, dist);
  136.                 ed k_var ;
  137.                 k_var.dis = dist ;
  138.                 k_var.p = i ;
  139.                 k_var.q = j ;
  140.                 edges.pb(k_var );
  141.  
  142.  
  143.  
  144.  
  145.  
  146.             }
  147.  
  148.         }
  149.  
  150.  
  151.         sort(edges.begin(), edges.end(), comp);
  152.         // for(i = 0 ;i< edges.size() ; i++)
  153.         //   pf("%lf\n",edges[i].dis );
  154.         mst(hold);
  155.  
  156.         pf("Case #%d: %d %d %d\n",++cs, _round(states),
  157.            _round(roads),
  158.            _round(rails));
  159.  
  160.     }
  161.     return 0 ;
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement