1083

#include <iostream>

using namespace std;

int map[102][303];
int vis[303];
int link[102];

bool issearch(int k)
{
	for(int i=1;i<=map[k][0];i++)
	{
		if(!vis[map[k][i]]){
			vis[map[k][i]] = 1;
		if(!link[map[k][i]]||issearch(link[map[k][i]]))
		{
			link[map[k][i]] = k;
		    return 1;
		}
		}

	}
	return false;
}
int main()
{   
	int test;
	cin>>test;
	while(test--)
	{
		int p,n;
		cin>>p>>n;
		memset(link,0,sizeof(link));
		memset(map,0,sizeof(map));
		for(int i=1;i<=p;i++)
		{
			int k;
			cin>>k;
			for(int j=1;j<=k;j++)
               cin>>map[i][++map[i][0]];
		}
		int i;
		for( i=1;i<=p;i++)
		{
			memset(vis,0,sizeof(vis));
			if(!issearch(i))break;
		}
		if(i==p+1)puts("YES");
		else puts("NO");
	}
	return 0;
}

你可能感兴趣的:(1083)