#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;
}
北大OJ1469
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.