Advertisement
aimon1337

Kruskal

May 26th, 2020
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.99 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4. ifstream fin("date.in");
  5. const int mxn=1e3;
  6. const int nax=1e5;
  7. struct muchie{
  8.     int x,y;
  9.     int c;
  10. }v[nax];
  11. int L[nax], n, m;
  12. int poz(int p, int u){
  13.     int piv, k;
  14.     muchie aux;
  15.     piv=v[p].c;
  16.     while(p<u){
  17.         if(v[p].c>v[u].c){
  18.             aux=v[p];
  19.             v[p]=v[u];
  20.             v[u]=aux;
  21.         }
  22.         if(v[p].c==piv)
  23.             u--;
  24.         else
  25.             p++;
  26.     }
  27.     k=p;
  28.     return k;
  29. }
  30. void qs(int p, int u){
  31.     int k;
  32.     if(p<u){
  33.         k=poz(p,u);
  34.         qs(p,k-1);
  35.         qs(k+1,u);
  36.     }
  37. }
  38. int main(){
  39.     int i, j;
  40.     int ax,ay;
  41.     fin>>n>>m;
  42.     for(i=1;i<=m;++i){
  43.         fin>>v[i].x>>v[i].y>>v[i].c;
  44.     }
  45.     fin.close();
  46.     qs(1,m);
  47.     for(i=1;i<=n;++i)
  48.         L[i]=i;
  49.     int ct=0, k=0;
  50.     for(i=1;i<=n && k<n; ++i){
  51.         if(L[v[i].x] != L[v[i].y]){
  52.             ct+=v[i].c;
  53.             ax=L[v[i].x]; ay=L[v[i].y];
  54.             for(j=1;j<=n;++j)
  55.                 if(L[j]==ay)
  56.                     L[j]=ax;
  57.         }
  58.     }
  59.     cout<<ct<<"\n"; return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement