hdu2063(最大权匹配匈牙利算法模板)

来源:互联网 发布:tts软件 编辑:程序博客网 时间:2024/05/22 10:57

题意:

有m个女生和n个男生,k个可以建立关系。一个女生只能和一个男生建立关系,求最大的关系数。

思路:

二分图最大匹配,匈牙利算法枚举男生来找增广路,如果能找到,匹配数加一。

代码:

#include <bits/stdc++.h>using namespace std;const int maxn = 505;vector<int> g[maxn];int link[maxn],vis[maxn];int k,n,m;bool dfs(int u){    for(int i=0;i<g[u].size();i++)    {        int v = g[u][i];        if(!vis[v])        {            vis[v] = 1;            if(link[v]==-1||dfs(link[v]))            {                link[v] = u;                return true;            }        }    }    return false;}int main(){    while(~scanf("%d",&k)&&k)    {        scanf("%d%d",&m,&n);        for(int i = 1;i<=n;i++)        {            g[i].clear();        }        memset(link,-1,sizeof(link));        for(int i = 0;i<k;i++)        {            int u,v;            scanf("%d%d",&u,&v);            g[v].push_back(u);        }        int ans = 0;        for(int i = 1;i<=n;i++)        {            memset(vis,0,sizeof(vis));            if(dfs(i))                ans++;        }        printf("%d\n",ans);    }    return 0;}

阅读全文
0 0
原创粉丝点击