北大OJ1469

#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
int map[301][301];
int match[301];
bool visit[301];
int cases,P,N,i,j,n,student,sum;
bool DFS(int u)
{
	for(int v=1;v<=N;v++)
	{
		if(!visit[v]&&map[u][v])
		{
			visit[v]=true;
			if(match[v]==0||DFS(match[v]))
			{
				match[v]=u;
				return true;
			}
		}
	}
	return false;
}
int main()
{
	scanf("%d",&cases);
	while(cases--)
	{
		memset(map,0,sizeof(map));
		memset(match,0,sizeof(match));
		scanf("%d%d",&P,&N);
		for(i=1;i<=P;i++)
		{
			scanf("%d",&n);
			for(j=1;j<=n;j++)
			{
				scanf("%d",&student);
				map[i][student]=1;
			}
		}
		sum=0;
	for(i=1;i<=P;i++)
		{
			memset(visit,0,sizeof(visit));
			if(DFS(i))
				sum++;
		}
		if(sum==P) printf("YES\n");
		else printf("NO\n");
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章