summaryrefslogtreecommitdiff
path: root/graph/maxCarBiMatch.cpp
diff options
context:
space:
mode:
authormzuenni <michi.zuendorf@gmail.com>2022-06-27 17:19:28 +0200
committermzuenni <michi.zuendorf@gmail.com>2022-06-27 17:19:28 +0200
commit5ab8a5088b729a9953b8dff1b2a985dc8fb2098b (patch)
treeed40d6936c0e9eee40ba62751cbf99ecddbaddc2 /graph/maxCarBiMatch.cpp
parentadabbad9c51cf7cd3874bfde8eac1fbcf84fec10 (diff)
updated tcr
Diffstat (limited to 'graph/maxCarBiMatch.cpp')
-rw-r--r--graph/maxCarBiMatch.cpp8
1 files changed, 3 insertions, 5 deletions
diff --git a/graph/maxCarBiMatch.cpp b/graph/maxCarBiMatch.cpp
index 24aebef..0a38d84 100644
--- a/graph/maxCarBiMatch.cpp
+++ b/graph/maxCarBiMatch.cpp
@@ -1,5 +1,3 @@
-// Laufzeit: O(n*min(ans^2, |E|))
-// Kanten von links nach rechts. Die ersten n Knoten sind links, die anderen rechts.
vector<vector<int>> adjlist;
vector<int> pairs; // Der gematchte Knoten oder -1.
vector<bool> visited;
@@ -14,12 +12,12 @@ bool dfs(int v) {
}
int kuhn(int n) { // n = #Knoten links.
- pairs.assign(adjlist.size(), -1);
+ pairs.assign(sz(adjlist), -1);
int ans = 0;
// Greedy Matching. Optionale Beschleunigung.
for (int i = 0; i < n; i++) for (auto w : adjlist[i])
- if (pairs[w] == -1) { pairs[i] = w; pairs[w] = i; ans++; break; }
- for (int i = 0; i < n; i++) if (pairs[i] == -1) {
+ if (pairs[w] < 0) {pairs[i] = w; pairs[w] = i; ans++; break;}
+ for (int i = 0; i < n; i++) if (pairs[i] < 0) {
visited.assign(n, false);
ans += dfs(i);
}