您的位置:首页 > 其它

POJ 1469 COURSES【二分图匹配】

2012-04-22 09:55 218 查看
题意:给你n 个学生 p 个课程,每一个课程都有一定的学生会选,能否找出p 个学生使他们满足每个学生选的课都不同。

分析:看看能否找到一个完全匹配的二分图。

View Code

#include<stdio.h>
#include<string.h>
#define clr(x)memset(x,0,sizeof(x))
struct node
{
int to,next;
}q[100000];
int head[103];
int tot;
void add(int s,int u)
{
q[tot].to=u;
q[tot].next=head[s];
head[s]=tot++;
}
int link[302];
int v[303];
int find(int x)
{
int k,i;
for(i=head[x];i;i=q[i].next)
{
k=q[i].to;
if(!v[k])
{
v[k]=1;
if(link[k]==0||find(link[k]))
{
link[k]=x;
return 1;
}
}
}
return 0;
}
int main()
{
int sum,t,n,m,x,y,i,k;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&m,&n);
clr(link); clr(head);
tot=1;
for(i=1;i<=m;i++)
{
scanf("%d",&k);
while(k--)
{
scanf("%d",&x);
add(i,x);
}
}
sum=0;
for(i=1;i<=m;i++)
{
clr(v);
if(find(i))
sum++;
else break;
}
if(sum==m)
printf("YES\n");
else printf("NO\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: