HDU 2063 過山車
阿新 • • 發佈:2019-02-04
二分圖,入門的題目
#include <iostream> #include <cstdio> #include <cstring> #include <string> using namespace std; const int MAX = 505; int g[MAX][MAX]; int used[MAX]; int r[MAX]; int k, m, n; inline void file() { freopen("D:\\he.txt", "r", stdin); freopen("D:\\out.txt", "w", stdout); } bool dfs(int x) { for (int i = 1; i <= m; ++i) { if (g[x][i] == 1 && !used[i]) { used[i] = 1; if (r[i] == 0 || dfs(r[i])) { r[i] = x; return true; } } } return false; } int main() { //file(); while (scanf("%d", &k)) { if (k == 0) break; scanf("%d%d", &m, &n); memset(g, 0, sizeof(g)); memset(r, 0, sizeof(r)); int girl, boy; for (int i = 0; i != k; ++i) { scanf("%d%d", &girl, &boy); g[boy][girl] = 1; } int res = 0; for (int i = 1; i <= n; ++i) { memset(used, 0, sizeof(used)); if(dfs(i)) res++; } printf("%d\n", res); } return 0; }