您的位置:首页 > Web前端

POJ 1274 The Perfect Stall ( 匈牙利算法 )

2010-10-04 11:06 441 查看
比较水的二分图匹配,用模板就能过。这是我的第一个二分图匹配题目,经过了几天的理论与算法过程钻研之后,我感觉他并不像曾经听到他名字时候那么难,今天突然想上手试一试,敲完后1Y,十分激动。

理解二分图匹配有一篇比较好的博文:(AekdyCoin大牛的空间)

http://hi.baidu.com/aekdycoin/blog/item/4f410a8c17e1181bb31bba80.html/cmtid/e2f7b0eba5f1b6ddd539c9f6#e2f7b0eba5f1b6ddd539c9f6

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int n,m,nstall;
int g[201][201];
int xm[201],ym[201],chk[201];
int searchpath(int u)
{
int v;
for( v = 1; v <= m; v++ )
if( g[u][v] && !chk[v] )
{
chk[v] = 1;
if( ym[v] == -1 || searchpath(ym[v]))
{
ym[v] = u;
xm[u] = v;
return 1;
}
}
return 0;
}
int maxpath(void)
{
int u,ret = 0;
memset(xm,-1,sizeof(xm));
memset(ym,-1,sizeof(ym));
for( u = 1; u <= n; u ++ )
if( xm[u] == -1 )
{
memset(chk,0,sizeof(chk));
if( searchpath(u) ) ret++;
}
return ret ++;
}
int main(void)
{
int i,j,t;
while( scanf("%d%d",&n,&m) != EOF )
{
memset(g,0,sizeof(g));
for( i = 1; i <= n; i++ )
{
scanf("%d",&nstall);
for( j = 1; j <= nstall; j++ )
{
scanf("%d",&t);
g[i][t] = 1;
}
}
printf("%d/n",maxpath());
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: