Advertisement
MattDovi

Untitled

Nov 22nd, 2020
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.55 KB | None | 0 0
  1. #include <fstream>
  2. #define NMAX 5002
  3.  
  4. using namespace std;
  5.  
  6. ifstream fin("kruskal.in");
  7. ofstream fout("kruskal.out");
  8.  
  9. int n, m, comp[NMAX];   /// comp - marcheaza componentele conexe; initial, toate vf = izolate
  10. struct muchii {
  11.     int a, b;
  12.     int cost;
  13. } mu[NMAX], rez[NMAX];
  14.  
  15. void citire() {
  16.     fin >> n >> m;
  17.     for(int i = 1; i <= m; i++)
  18.         fin >> mu[i].a >> mu[i].b >> mu[i].cost;
  19. }
  20.  
  21. void ordonare() {
  22.     for(int i = 1; i < m; i++)
  23.         for(int j = i + 1; j <= m; j++) {
  24.             if(mu[j].cost < mu[i].cost){
  25.                 muchii c = mu[i];
  26.                 mu[i] = mu[j];
  27.                 mu[j] = c;
  28.             }
  29.         }
  30. }
  31.  
  32. int kruskal() {
  33.     for(int i = 1; i <= n; i++) comp[i] = i;
  34.  
  35.     int cost = 0;
  36.     int ms = 0; /// nr muchii selectate
  37.     int ctr = 0;
  38.  
  39.     while(ms != n - 1) {
  40.         do {
  41.             ctr++;
  42.         } while(comp[mu[ctr].a] == comp[mu[ctr].b]);
  43.  
  44.         ms++;
  45.         int a1 = comp[mu[ctr].a];
  46.         int b1 = comp[mu[ctr].b];
  47.         int mini, maxi;
  48.  
  49.         if(a1 > b1) {
  50.             mini = b1;
  51.             maxi = a1;
  52.         }
  53.         else {
  54.             mini = a1;
  55.             maxi = b1;
  56.         }
  57.  
  58.         rez[ms] = mu[ctr];
  59.         cost += mu[ctr].cost;
  60.  
  61.         for(int i = 1; i <= n; i++)
  62.             if(comp[i] == maxi)
  63.                 comp[i] = mini;
  64.     }
  65.  
  66.     fout << cost << '\n';
  67.     for(int i = 1; i <= n - 1; i++)
  68.         fout << mu[i].a << ' ' << mu[i].b << '\n';
  69. }
  70.  
  71. int main()
  72. {
  73.     citire();
  74.     ordonare();
  75.     kruskal();
  76.     return 0;
  77. }
  78.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement