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

来源:互联网 发布:清除注册表的软件 编辑:程序博客网 时间:2024/05/29 14:40

题目描述
给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数


【题目分析】
匈牙利算法。


【代码】

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;int n,m,e,ans;int map[1001][1001];int match[1001],vis[1001];bool dfs(int k){    for (int i=1;i<=m;++i)    {        if (!vis[i]&&map[k][i]){            vis[i]=1;            if (!match[i]||dfs(match[i]))            {                match[i]=k;                return true;            }        }    }    return false;}int main(){    scanf("%d%d%d",&n,&m,&e);    for (int i=1;i<=e;++i)    {        int a,b;        scanf("%d%d",&a,&b);        if (a>n||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);}
0 0
原创粉丝点击