This documentation is automatically generated by online-judge-tools/verification-helper
View the Project on GitHub AlexanderNekrasov/Youthful-Passion-Fruit-teambook
/** * Author: Igor Markelov * Date: 2022-11-12 * Source: https://e-maxx.ru/algo/assignment_hungary * Description: Hungarian algorithm * Time: O(n^3) */ int n, m; vector<vector<int>> a; vector<int> u(n + 1), v(m + 1), p(m + 1), way(m + 1); for (int i = 1; i <= n; ++i) { p[0] = i; int j0 = 0; vector<int> minv(m + 1, INF); vector<char> used(m + 1, false); do { used[j0] = true; int i0 = p[j0], delta = INF, j1; for (int j = 1; j <= m; ++j) if (!used[j]) { int cur = a[i0][j] - u[i0] - v[j]; if (cur < minv[j]) minv[j] = cur, way[j] = j0; if (minv[j] < delta) delta = minv[j], j1 = j; } for (int j = 0; j <= m; ++j) if (used[j]) u[p[j]] += delta, v[j] -= delta; else minv[j] -= delta; j0 = j1; } while (p[j0] != 0); do { int j1 = way[j0]; p[j0] = p[j1]; j0 = j1; } while (j0); } // matching vector<int> ans(n + 1); for (int j = 1; j <= m; ++j) { ans[p[j]] = j; } // cost int cost = -v[0];
#line 1 "graph/Hungarian.cpp" /** * Author: Igor Markelov * Date: 2022-11-12 * Source: https://e-maxx.ru/algo/assignment_hungary * Description: Hungarian algorithm * Time: O(n^3) */ int n, m; vector<vector<int>> a; vector<int> u(n + 1), v(m + 1), p(m + 1), way(m + 1); for (int i = 1; i <= n; ++i) { p[0] = i; int j0 = 0; vector<int> minv(m + 1, INF); vector<char> used(m + 1, false); do { used[j0] = true; int i0 = p[j0], delta = INF, j1; for (int j = 1; j <= m; ++j) if (!used[j]) { int cur = a[i0][j] - u[i0] - v[j]; if (cur < minv[j]) minv[j] = cur, way[j] = j0; if (minv[j] < delta) delta = minv[j], j1 = j; } for (int j = 0; j <= m; ++j) if (used[j]) u[p[j]] += delta, v[j] -= delta; else minv[j] -= delta; j0 = j1; } while (p[j0] != 0); do { int j1 = way[j0]; p[j0] = p[j1]; j0 = j1; } while (j0); } // matching vector<int> ans(n + 1); for (int j = 1; j <= m; ++j) { ans[p[j]] = j; } // cost int cost = -v[0];