HDU 2063 过山车(匈牙利算法)

来源:互联网 发布:知乎图片大小 编辑:程序博客网 时间:2024/05/18 02:49
#include<iostream>#include<cstring>using namespace std;const int maxn=500+5;bool line[maxn][maxn],used[maxn];int gril[maxn];int k,m,n;bool find(int x){    for(int j=1;j<=n;j++)    {        if(line[x][j]&&!used[j])        {            used[j]=true;            if(gril[j]==-1||find(gril[j]))            {                gril[j]=x;                return true;            }        }    }    return false;}int main(){    while(scanf("%d",&k)&&k)    {        memset(line,false,sizeof(line));        memset(gril,-1,sizeof(gril));        scanf("%d%d",&m,&n);        for(int i=0;i<k;i++){            int u,v;            scanf("%d%d",&u,&v);            line[u][v]=true;        }        int ans=0;        for(int i=1;i<=m;i++){            memset(used,false,sizeof(used));            if(find(i)) ans+=1;        }        printf("%d\n",ans);    }    return 0;}

0 0