Advertisement
MattDovi

Untitled

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