1. 程式人生 > >洛谷 P3386 【模板】二分圖匹配

洛谷 P3386 【模板】二分圖匹配

#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>

using namespace std;

#define MAXN 1000+7

int a;
int b;
int n;
int m;
int k;
int Ans;

int rank[MAXN];

bool vis[MAXN];
bool f[MAXN][MAXN];

inline bool check(int x)
{
    for (int i=1;i<=m;i++) {
        if (f[x][i]&&!vis[i]) {
            vis[i]=1;
            if (rank[i]==0||check(i)) {
                rank[i]=x;
                return 1;
            }
        }
    }
    return 0;
}

inline void solve()
{
    scanf("%d%d%d",&n,&m,&k);
    for (int i=1;i<=k;i++) {
        scanf("%d%d",&a,&b);
        f[a][b]=1;
    }
    for (int i=1;i<=n;i++) {
        memset(vis,0,sizeof(vis));
        if (check(i))
            Ans++;
    }    
    printf("%d\n",Ans);
}

int main()
{
    solve();
    return 0;
}  // 最簡單的二分圖 希望大家學會哦O(∩_∩)O~~