POJ3041

来源:互联网 发布:北京威尔士健身 知乎 编辑:程序博客网 时间:2024/05/16 07:19

想了很久都没想出来的题目,后来听学长讲是二分匹配,看了下算法思想,一次AC

#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>using namespace std;bool mapp[505][550];int vis[505];int used[505];int m,n;int dfs(int han){    int i;    for(i=1;i<=m;i++)    {        if(vis[i])continue;        if(!mapp[han][i])continue;        vis[i]=1;        if(!used[i]||dfs(used[i]))        {            used[i]=han;            return true;        }    }    return false;}int main(){    int i;    int a,b;    while(scanf("%d%d",&m,&n)!=EOF)    {        memset(mapp,false,sizeof(mapp));        memset(used,0,sizeof(used));        for(i=1;i<=n;i++)        {            scanf("%d%d",&a,&b);            mapp[a][b]=true;        }        int sum=0;        for(i=1;i<=m;i++)        {            memset(vis,0,sizeof(vis));            if(dfs(i))            sum++;        }        printf("%d\n",sum);    }    return 0;}


0 0
原创粉丝点击