1. 程式人生 > >2063 過山車(二分圖匹配)

2063 過山車(二分圖匹配)

題目連結:

題解:

二分圖匹配模板題。

AC程式碼:

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
int V[505][505];
int check[1000];
int matching[1000];
int n,m;
bool dfs(int u)
{
    int i;
    for(i = 1; i <= m; i++)
    {
        if(check[i] || V[u][i] != 1
)//男孩已經被選走了或者這倆人互相不喜歡 continue; check[i] = 1; if(matching[i] == -1 || dfs(matching[i]))//利用dfs和增廣路原理,觀察男孩是否可以騰出位置或者沒有被選走 { matching[i] = u;//配個對 return true; } } return false; } int solve(int n_left) { int i, ans = 0; memset
(matching, -1 ,sizeof(matching)); for(i = 1; i <= n_left; i++) { memset(check, 0 ,sizeof(check)); if(dfs(i)) ans++; } return ans; } int main() { int k ; while(cin >> k) { if(k == 0)break; memset(V,0,sizeof(V)); cin
>> n >> m; while(k--) { int a,b; cin >> a >> b; V[a][b] = 1; } cout << solve(n) <<endl; } return 0; }