Advertisement
Slayerfeed

Untitled

Apr 24th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.31 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. using tu = tuple<int ,int ,int> ;
  5. int parent[100010];
  6. bool visited[100010];
  7. int find(int u){
  8.  
  9.     if(parent[u]==u){
  10.         return u;
  11.     }
  12.     return parent[u]=find(parent[u]);
  13. }
  14.  
  15. void merge(int u,int v){
  16.     u = find(u);
  17.     v = find(v);
  18.  
  19.     if(u==v){
  20.         return ;
  21.     }
  22.  
  23.     if(u>v){
  24.         parent[v]=u;
  25.     }
  26.     else{
  27.         parent[u]=v;
  28.     }
  29. }
  30.  
  31.  
  32. int main(){
  33.     int n ,m ;
  34.     scanf("%d%d",&n,&m);
  35.     for(int i=1;i<=n;++i){
  36.         parent[i]=i;
  37.     }
  38.     vector<tu> sp;
  39.     int u ,v ,w;
  40.     for(int i=1;i<=m;++i){
  41.         scanf("%d%d%d",&u,&v,&w);
  42.         sp.push_back(make_tuple(w,u,v));
  43.     }
  44.  
  45.     sort(sp.begin(),sp.end());
  46.     int low=0;
  47.     int max1=-1;
  48.     bool anothergraph=false;
  49.     for(int c=0;c<m;++c){
  50.  
  51.         u = get<1>(sp[c]);
  52.         v = get<2>(sp[c]);
  53.         if(find(u)==find(v)){
  54.             continue;
  55.         }
  56.         visited[c]=true;
  57.         max1=get<0>(sp[c]);
  58.         low+= get<0>(sp[c]);
  59.         merge(u,v);
  60.     }
  61.  
  62.     for(int i=0;i<m;++i){
  63.         if(!visited[i]&&get<0>(sp[i])<=max1){
  64.             anothergraph=true;
  65.             break;
  66.         }
  67.     }
  68.     cout << low << " ";
  69.     if(anothergraph){
  70.         cout << "1";
  71.     }
  72.     else{
  73.         cout << "0";
  74.     }
  75.     return 0;
  76.  
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement