Advertisement
YEZAELP

PROG-2038: Maintain

Jun 8th, 2020
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.25 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. using pii = pair<int,pair<int,int>> ;
  4. using pi = pair<int,int>;
  5. vector <pii> g;
  6. int n,w;
  7. int parent[201],rnk[201];
  8. int root(int u){
  9.     if(parent[u]==u) return u;
  10.     return parent[u]=root(parent[u]);
  11. }
  12. void mrg(int u,int v){
  13.     u=root(u);
  14.     v=root(v);
  15.     if(rnk[u]<rnk[v]){
  16.         rnk[v]+=rnk[u];
  17.         parent[u]=v;
  18.     }
  19.     else {
  20.         rnk[u]+=rnk[v];
  21.         parent[v]=u;
  22.     }
  23. }
  24. int mn( priority_queue <pii,vector<pii>,greater<pii>> pq ){
  25.  
  26.     int dis=0,start=-1;
  27.     for(int i=1;i<=n;i++){
  28.         parent[i]=i;
  29.         rnk[i]=1;
  30.     }
  31.  
  32.     while(pq.size()>0){
  33.  
  34.         int u,v,w;
  35.         w=pq.top().first;
  36.         u=pq.top().second.first;
  37.         v=pq.top().second.second;
  38.         pq.pop();
  39.  
  40.         u=root(u);
  41.         v=root(v);
  42.  
  43.         if(u==v) continue;
  44.  
  45.         if(start==-1) start=u;
  46.         mrg(u,v);
  47.         dis+=w;
  48.  
  49.         if(rnk[root(start)]==n) return dis;
  50.     }
  51.  
  52.     return -1;
  53. }
  54. int main(){
  55.  
  56.     scanf("%d%d",&n,&w);
  57.  
  58.     priority_queue <pii,vector<pii>,greater<pii>> pq;
  59.  
  60.     for(int i=1;i<=w;i++){
  61.         int u,v,w;
  62.         scanf("%d%d%d",&u,&v,&w);
  63.         pq.push({w,{u,v}});
  64.  
  65.         printf("%d\n",mn(pq));
  66.  
  67.     }
  68.  
  69.     return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement