洛谷P7368 [USACO05NOV] Asteroids G 題解 二分圖最小點覆蓋 匈牙利演算法

quanjun發表於2024-10-23

題目連結:https://www.luogu.com.cn/problem/P7368

二分圖最小點覆蓋 模板題。

二分圖最小點覆蓋與二分圖最大匹配的關係。

所以用匈牙利演算法求一下二分圖最大匹配即可。

示例程式:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 505;

int n, m, match[maxn], ans;
vector<int> g[maxn];
bool vis[maxn];

int find(int u) {
    for (auto v : g[u]) {
        if (vis[v])
            continue;
        vis[v] = true;
        if (!match[v] || find(match[v])) {
            match[v] = u;
            return true;
        }
    }
    return false;
}

int main() {
    cin >> n >> m;
    while (m--) {
        int u, v;
        cin >> u >> v;
        g[u].push_back(v);
    }
    for (int i = 1; i <= n; i++) {
        memset(vis, 0, sizeof vis);
        if (find(i))
            ans++;
    }
    cout << ans << endl;
    return 0;
}

相關文章