POJ 1274 The Perfect Stall(二分匹配-hungary)

来源:互联网 发布:小松菜奈穿衣 知乎 编辑:程序博客网 时间:2024/05/16 13:55

Description
有n头奶牛,每头奶牛都有自己喜欢的几个谷仓,每个谷仓只能供应一头奶牛进食,问最多能有多少头奶牛可以去自己喜欢的谷仓吃食物
Input
第一行为两个整数n和m分别表示奶牛数和谷仓数,之后n行每行首先输入一个整数num表示该头奶牛喜欢的谷仓数,之后num个整数表示这个奶牛的喜欢的谷仓编号
Output
输出最多能有多少头奶牛可以吃到食物
Sample Input
5 5
2 2 5
3 2 3 4
2 1 5
3 1 2 5
1 2
Sample Output
4
Solution
二分匹配裸题,直接套模版
Code

#include<cstdio>#include<iostream>#include<cstring>using namespace std;#define maxn 222int uN,vN;int g[maxn][maxn];int linker[maxn];bool used[maxn];bool dfs(int u){    int v;    for(v=0;v<vN;v++)        if(g[u][v]&&!used[v])        {            used[v]=true;            if(linker[v]==-1||dfs(linker[v]))            {                linker[v]=u;                return true;            }            }      return false;  }    int hungary(){    int res=0;    int u;    memset(linker,-1,sizeof(linker));    for(u=0;u<uN;u++)    {        memset(used,0,sizeof(used));        if(dfs(u))  res++;    }     return res;   }  int main(){    while(~scanf("%d%d",&uN,&vN))     {        memset(g,0,sizeof(g));        for(int i=0;i<uN;i++)        {            int num,j;            scanf("%d",&num);            while(num--)            {                scanf("%d",&j);                g[i][j-1]=1;            }        }        int ans=hungary();         printf("%d\n",ans);    }    return 0;} 
0 0
原创粉丝点击