Advertisement
SuitNdtie

Maintain

May 7th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.95 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<map>
  3. using namespace std;
  4.  
  5. int parent[210];
  6.  
  7. int find(int x){
  8.     if(parent[x] == x)return x;
  9.     return parent[x] = find(parent[x]);
  10. }
  11.  
  12. void unions(int x,int y){
  13.     int rx = find(x);
  14.     int ry = find(y);
  15.     parent[rx] = ry;
  16. }
  17.  
  18. int main()
  19. {
  20.     multimap<int,pair<int,int> >mymap;
  21.     int n,w;
  22.     scanf("%d %d",&n,&w);
  23.    
  24.     for(int i = 0 ; i <= n ; i ++)parent[i] = i;
  25.    
  26.     for(int t = 0 ; t < w ; t ++){
  27.         int cnt = n;
  28.         int sum = 0;
  29.         int u,v,d;
  30.         scanf("%d %d %d",&u,&v,&d);
  31.         mymap.insert({d,{u,v}});
  32.         std::multimap<int,pair<int,int> >::iterator its = mymap.begin();
  33.  
  34.         int ce = 0;
  35.         while(its != mymap.end()){
  36.             u = its->second.first;
  37.             v = its->second.second;
  38.             d = its->first;
  39.             if(find(u) != find(v)){
  40.                 unions(u,v);
  41.                 sum += d;
  42.                 ce++;
  43.             }
  44.             ++its;
  45.         }
  46.         if(ce < n - 1){
  47.             printf("-1\n");
  48.         }else{
  49.             printf("%d\n",sum);
  50.         }
  51.         for(int i = 0 ; i <= n ; i ++){
  52.             parent[i] = i;
  53.         }
  54.     }
  55.     return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement