Machine Schedule(poj 1274)

题目大意:有n个奶牛和m个谷仓,现在每个奶牛有自己喜欢去的谷仓,并且它们只会去自己喜欢的谷仓吃东西,问最多有多少奶牛能够吃到东西

输入第一行给出n与m

接着n行

每行第一个数代表这个奶牛喜欢的谷仓的个数P,后面接着P个数代表这个奶牛喜欢哪个谷仓

#include<cstdio>
#include<iostream>
#include<cstring>
#define M 510
using namespace std;
int used[M],belong[M],a[M][M],n,m;
int find(int i)
{
    for(int j=1;j<=m;j++)
      if(!used[j]&&a[i][j])
      {
          used[j]=1;
          if(!belong[j]||find(belong[j]))
          {
              belong[j]=i;
              return 1;
        }
      }
    return 0;
}
void work()
{
    for(int i=1;i<=n;i++)
    {
        int x,y;
        scanf("%d",&x);
        for(int j=1;j<=x;j++)
        {
            scanf("%d",&y);
            a[i][y]=1;
        }
    }
    int tot=0;
    for(int i=1;i<=n;i++)
    {
        if(find(i))
        {
            memset(used,0,sizeof(used));
            tot++;
        }
    }
    printf("%d\n",tot);
}
int main()
{
    freopen("jh.in","r",stdin);
    while(scanf("%d%d",&n,&m)==2)
    {
        memset(a,0,sizeof(a));
        memset(belong,0,sizeof(belong));
        work();
    }
    return 0;
}
View Code

 

posted @ 2016-07-01 10:03  karles~  阅读(191)  评论(0编辑  收藏  举报