Advertisement
kuchumov

Untitled

Jan 20th, 2017
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.81 KB | None | 0 0
  1. for (int i = 1; i <= n; i++)
  2.     {
  3.         p[0] = i;
  4.         int j0 = 0;
  5.  
  6.         fill(minv, minv + m + 1, INF);
  7.         fill(used, used + m + 1, false);
  8.  
  9.         do
  10.         {
  11.             used[j0] = true;
  12.             int i0 = p[j0];
  13.             int delta = INF;
  14.             int j1 = 0;
  15.  
  16.             for (int j = 1; j <= m; j++)
  17.             {
  18.                 if (!used[j])
  19.                 {
  20.                     int cur = a[i0][j] - u[i0] - v[j];
  21.                    
  22.                     if (cur < minv[j])
  23.                     {
  24.                         minv[j] = cur;
  25.                         way[j] = j0;
  26.                     }
  27.  
  28.                     if (minv[j] < delta)
  29.                     {
  30.                         delta = minv[j];
  31.                         j1 = j;
  32.                     }
  33.                 }
  34.             }
  35.  
  36.             for (int j = 0; j <= m; j++)
  37.             {
  38.                 if (used[j])
  39.                 {
  40.                     u[p[j]] += delta;
  41.                     v[j] -= delta;
  42.                 }
  43.                 else
  44.                 {
  45.                     minv[j] -= delta;
  46.                 }
  47.             }
  48.  
  49.             j0 = j1;
  50.  
  51.         } while (p[j0] != 0);
  52.  
  53.         do
  54.         {
  55.             int j1 = way[j0];
  56.             p[j0] = p[j1];
  57.             j0 = j1;
  58.         } while (j0 != 0);
  59.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement