Guest User

prince

a guest
Jan 12th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.22 KB | None | 0 0
  1. #include<iostream>
  2. #include<bits/stdc++.h>
  3.  
  4. using namespace std;
  5.  
  6. #define Max 10010
  7.  
  8. struct edge
  9. {
  10.     int u,v;
  11.     long long int w;
  12.     bool operator < ( const edge& p ) const
  13.     {
  14.         return w < p.w;
  15.     }
  16. };
  17. int par[Max];
  18. vector<edge>e;
  19. int find(int r)
  20. {
  21.    if (par[r]==r)
  22.         return r;
  23.      return par[r]=find(par[r]);
  24. }
  25. long long int mst(int n)
  26. {
  27.     sort(e.begin(),e.end());
  28.     for(int i=1;i<=n;i++)par[i]=i;
  29.  
  30.     int count=0;
  31.  
  32.     long long int mx = 0;
  33.  
  34.     long long int total_cost=0;
  35.     for(int i=0;i<(int)e.size();i++)
  36.     {
  37.         int u=find(e[i].u);
  38.         int v=find(e[i].v);
  39.         if(u!=v)
  40.         {
  41.             par[u]=v;
  42.             count++;
  43.             total_cost+=e[i].w;
  44.             mx = max(mx,e[i].w);
  45.             if(count==n-1) break;
  46.         }
  47.     }
  48.     return total_cost-mx;
  49. }
  50.  
  51. int main(){
  52. //  READ("in");
  53.     int test, n,m;
  54.     scanf("%d",&test);
  55.  
  56.     for(int Case=1;Case<=test;Case++)
  57.     {
  58.         e.clear();
  59.         scanf("%d %d",&n,&m);
  60.         for(int i=1;i<=m;i++)
  61.         {
  62.             int u,v;
  63.             long long int w;
  64.             scanf("%d %d %lld",&u,&v,&w);
  65.             edge data;
  66.             data.u=u;
  67.             data.v=v;
  68.             data.w=w;
  69.             e.push_back(data);
  70.         }
  71.         printf("Case %d: %lld\n",Case,mst(n));
  72.     }
  73.  
  74.  
  75.     return 0;
  76.  
  77. }
Advertisement
Add Comment
Please, Sign In to add comment