#include<bits/stdc++.h>
using namespace std;
vector< int >v[305];
int vis[305];
int link[305];
bool dfs(int u)
{
for(int i=0; i<v[u].size(); i++)
{
if(!vis[v[u][i]])
{
vis[v[u][i]]=1;
if(!link[v[u][i]] || dfs(link[v[u][i]]))
{
link[v[u][i]] = u;
return true;
}
}
}
return false;
}
void Init()
{
for(int i = 0; i <305; i++)
v[i].clear();
memset(vis,0,sizeof(vis));
memset(link,0,sizeof(link));
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
Init();
int n,m;
scanf("%d%d",&m,&n);
for(int i = 1; i<= m; i++)
{
int x;
scanf("%d", &x);
int y;
while(x--)
{
scanf("%d",&y);
v[i].push_back(y);
}
}
int cot = 0;
for(int i = 1 ; i <= m; i++)
{
memset(vis,0,sizeof(vis));
if(dfs(i))
{
cot++;
}
}
if(cot == m)
{
printf("YES\n");
}
else
printf("NO\n");
}
return 0;
}
HDU 1083 二分匹配
最新推荐文章于 2019-09-01 20:03:50 发布