Алгоритм Куна
Перейти к навигации
Перейти к поиску
vector<vector<int>> g;
vector<int> pairFromA;
vector<int> visited;
bool dfs(int vFromA) {
visited[vFromA] = 1;
for (int vFromB : g[vFromA]) {
int &to = pairFromA[vFromB];
if (to == -1 || !visited[to] && dfs(to)) {
to = vFromA;
return 1;
}
}
return 0;
}
void kuhn(int aSize, int bSize) {
pairFromA.assign(bSize, -1);
for (int vFromA = 0; vFromA < aSize; vFromA++) {
visited.assign(aSize, 0);
dfs(vFromA);
}
}
Ссылки
Теория:
- e-maxx.ru — Алгоритм Куна нахождения наибольшего паросочетания в двудольном графе
- neerc.ifmo.ru/wiki — Алгоритм Куна для поиска максимального паросочетания
- algorithmica.org — Паросочетания
- Codeforces — Паросочетание. Быстрый Кун
- Brilliant.org — Matching Algorithms
Код: