MAGCARI

Kruskal

Jul 29th, 2022
967
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.76 KB | None | 0 0
  1. /*
  2.     Task    : Kruskal
  3.     Author  : Phumipat C. [MAGCARI]
  4.     Language: C++
  5.     Created : 30 July 2022 [09:03]
  6. */
  7. #include<bits/stdc++.h>
  8. using namespace std;
  9. struct A{
  10.     int u,v,w;
  11.     bool operator < (const A&o) const{
  12.         if(w!=o.w)  return w<o.w;
  13.         else        return v<o.v;
  14.     }
  15. };
  16. int p[100010];
  17. int fr(int u){
  18.     if(u == p[u])   return u;
  19.     else            return p[u] = fr(p[u]);
  20. }
  21. vector<A > edges;
  22. int main(){
  23.     cin.tie(0)->sync_with_stdio(0);
  24.     cin.exceptions(cin.failbit);
  25.  
  26.     int n,m,u,v,w;
  27.     cin >> n >> m;
  28.  
  29.     for(int i=1;i<=n;i++)
  30.         p[i] = i;
  31.    
  32.     for(int i=1;i<=m;i++){
  33.         cin >> u >> v >> w;
  34.         edges.push_back({u,v,w});
  35.     }
  36.  
  37.     sort(edges.begin(),edges.end());
  38.  
  39.     int sum = 0;
  40.     for(auto x:edges){
  41.         int ru = fr(x.u),rv = fr(x.v);
  42.         if(ru == rv)    continue;
  43.         sum+=x.w;
  44.         p[ru] = rv;
  45.     }
  46.  
  47.     cout << sum << '\n';
  48.     return 0;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment