poj 1274 The Perfect Stall(二分…

来源:互联网 发布:ar9565 linux 编辑:程序博客网 时间:2024/06/11 20:48
题意:FJ有N头cow ,M个stall for the milk 每头只愿在自己喜欢的stall上产奶,求最大匹配。

思路:简单的二分匹配。

//332K   0MS
#include <stdio.h>
#include <string.h>
#define N 205

int mat[N][N],vis[N],xM[N],yM[N];
int n,m;

bool DFS(int u)
{
    for (int v =1;v <= n;v ++)
       if (mat[u][v] && !vis[v])
       {
           vis[v] = 1;
           if (yM[v] == -1 ||DFS(yM[v]))
           {
               yM[v] = u,xM[u] = v;
               return true;
           }
       }
    returnfalse;
}
int MaxMatch ()
{
    int res =0;
    memset(xM,-1,sizeof(xM));
    memset(yM,-1,sizeof(yM));
    for (int u =1;u <= n;u ++)
       if (xM[u] == -1)
       {
           memset (vis,0,sizeof(vis));
           if (DFS(u))
               res ++;
       }
    returnres;
}
int main ()
{
    intu,v,s;
    while(~scanf ("%d%d",&n,&m))
    {
       memset (mat,0,sizeof(mat));
       for (u = 1;u <= n;u ++)
       {
           scanf ("%d",&s);
           while (s --)
           {
               scanf ("%d",&v);
               mat[u][v] = 1;
           }
       }
       int ans = MaxMatch ();
       printf ("%d\n",ans);
    }
    return0;
}