二分图匹配模板

code:

//By Menteur_Hxy
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<ctime>
#include<queue>
#include<vector>
using namespace std;

const int MAX=500010;
const int INF=0x3f3f3f3f;

int n,m,e,ans,a,b;
int edge[1010][1010],vis[1010],match[1010];

bool dfs(int x) {
    for(register int i=1;i<=m;i++) {
        if(edge[x][i]&&!vis[i]) {
            vis[i]=1;
            if(!match[i] || dfs(match[i])) {
                match[i]=x; return true;
            }
        }
    }
    return false;
}

int main() {
    scanf("%d %d %d",&n,&m,&e);
    for(register int i=1;i<=e;i++) {
        scanf("%d %d",&a,&b);
        if(a<=n&&b<=m)
            edge[a][b]=1;
    }
    for(register int i=1;i<=n;i++) {
        for(register int j=1;j<=m;j++) vis[j]=0;
        if(dfs(i)) ans++;
    }
    printf("%d",ans);
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 博主:https://www.cnblogs.com/Menteur-Hxy/
原文地址:https://www.cnblogs.com/Menteur-Hxy/p/9248013.html