二分图匹配模板

来源:互联网 发布:淘宝电脑客户端 编辑:程序博客网 时间:2024/06/01 07:32
#include#includeconst int MAX=1001;int n,m,k;int link[MAX];bool vis[MAX];bool map[MAX][MAX];bool dfs(int a){    for(int i=1;i<=m;i++)        if(map[a][i]==1&&!vis[i])        {            vis[i]=1;            if(!link[i]||dfs(link[i]))            {                link[i]=a;                return 1;            }        }    return 0;}int main(){    int a,b,ans=0;    scanf("%d%d%d",&n,&m,&k);    for(int i=1;i<=k;i++)    {        scanf("%d%d",&a,&b);        if(a>m||b>m) continue;        map[a][b]=1;    }    for(int i=1;i<=n;i++)    {        memset(vis,0,sizeof(vis));        if(dfs(i))            ans++;    }    printf("%d\n",ans);    return 0;}