您的位置:首页 > 其它

POJ 1469 ZOJ 1140 Courses 二分图匹配

2013-04-09 22:39 489 查看
继续匈牙利二分匹配,其实我都不知道怎样写匈牙利算法,只是记住了可以这样写,悲哀啊

唉````

裸的二分匹配,贴代码:

View Code

#include <cstdio>
#include <cstring>
#define MAXC 105
#define MAXS 305
bool g[MAXC][MAXS];
bool used[MAXS];
int p,n;
int xx[MAXC],yy[MAXS];
void init()
{
int i,j;
scanf("%d%d",&p,&n);
memset(g,0,sizeof(g));
for(i=0; i<p; ++i)
{
int num,st;
scanf("%d",&num);
for(j=0; j<num; ++j)
{
scanf("%d",&st);
g[i][st]= 1;
}
}
}
bool path(int u)
{
int v;
for(v=1; v<=n; ++v)
{
if(g[u][v] && !used[v])
{
used[v] = 1;
if(yy[v] == -1 || path(yy[v]))
{
xx[u] = v;
yy[v] = u;
return 1;
}
}
}
return 0;
}
void maxMatch()
{
int i;
memset(xx,0xff,sizeof(xx));
memset(yy,0xff,sizeof(yy));
int ans = 0;
for(i=0; i<p; ++i)
{
if(xx[i] == -1)
{
memset(used,0,sizeof(used));
if(path(i))
++ans;
}
}
if(ans == p) printf("YES\n");
else        printf("NO\n");
}
int main()
{
//    freopen("in.cpp","r",stdin);
int T;
scanf("%d",&T);
while(T--)
{
init();
maxMatch();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: