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

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

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~~

你可能感兴趣的:(二分图)