Advertisement
Slayerfeed

Overtree

Apr 23rd, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.91 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. int parent[100010];
  5.  
  6. using tu = tuple<int ,int ,int>;
  7. int find(int u){
  8.     if(parent[u]==u){
  9.         return u;
  10.     }
  11.     return parent[u]=find(parent[u]);
  12. }
  13.  
  14. void merge(int u ,int v){
  15.      u=find(u);
  16.      v=find(v);
  17.  
  18.     if(u==v){
  19.         return ;
  20.     }
  21.     if(u>v){
  22.         parent[v]=u;
  23.     }
  24.     else{
  25.         parent[u]=v;
  26.     }
  27. }
  28. int main(){
  29.     int n,m;
  30.  
  31.     scanf("%d%d",&n,&m);
  32.     for(int i=1;i<=n;++i){
  33.         parent[i]=i;
  34.     }
  35.     int u , v ,w;
  36.     vector<tu> way;
  37.     for(int i=0;i<m;++i){
  38.         scanf("%d%d%d",&u,&v,&w);
  39.         way.push_back(make_tuple(w,u,v));
  40.     }
  41.     sort(way.begin(),way.end());
  42.     for(auto c : way){
  43.         if(find(get<1>(c))==find(get<2>(c))){
  44.             continue;
  45.         }
  46.         cout << get<1>(c) << " " << get<2>(c) << "\n";
  47.  
  48.         merge(get<1>(c),get<2>(c));
  49.     }
  50.  
  51.  
  52.     return 0;
  53.  
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement