POJ 1274 The Perfect Stall 二分匹配模板

来源:互联网 发布:酒店网络设计 编辑:程序博客网 时间:2024/06/16 19:05
http://poj.org/problem?id=1274
题意:给你n头牛m个房子,每头牛都有自己喜欢的房子,求怎样分配使得尽可能多的牛都住进自己喜欢的房子,输出
这个个数;

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;

vector<int> G[405];
int match[405],used[405];
int n,m;
void add_edge(int u,int v)
{
G[u].push_back(v);
G[v].push_back(u);
}

bool dfs(int u)
{
used[u]=1;
for(int i=0;i<G[u].size();i++)
{
int v=G[u][i];
int w=match[v];
if(w<0||!used[w]&&dfs(w))
{
match[u]=v;
match[v]=u;
return true;
}
}
return false;
}

void bipartite_match()
{
memset(match,-1,sizeof(match));
int res=0;
for(int i=1;i<=n;i++)
if(match[i]<0)
{
memset(used,0,sizeof(used));
if(dfs(i)) res++;
}
printf("%d\n",res);
}

int main()
{
while(~scanf("%d %d",&n,&m))
{
int u,v,num;
for(int i=1;i<=n+m;i++)
G[i].clear();
for(int u=1;u<=n;u++)
{
scanf("%d",&num);
for(int j=0;j<num;j++)
{
scanf("%d",&v);
add_edge(u,v+n);
}
}

bipartite_match();
}
return 0;
}



原创粉丝点击