#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int cs[305][305];
int link[305];
int has[305];
int n, m, p;
int pipen(int x) {
for(int i = 1; i <= n; i++) {
if(!has[i] && cs[x][i] == 1) {
has[i] = 1;
if(!link[i]||pipen(link[i])) {
link[i] = x;
return 1;
}
}
}
return 0;
}
int main()
{
int t;
int a;
int ans;
scanf("%d", &t);
while(t--) {
scanf("%d%d", &p, &n);
ans = 0;
memset(cs, 0, sizeof(cs));
for(int i = 1; i <= p; i++) {
scanf("%d", &m);
for(int j = 0; j < m; j++) {
scanf("%d", &a);
cs[i][a] = 1;
}
}
memset(link, 0, sizeof(link));
for(int i = 1; i <= p; i++) {
memset(has, 0, sizeof(has));
if(pipen(i))
ans++;
}
if(ans == p) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
hdu 1083 二分匹配
最新推荐文章于 2019-09-01 20:03:50 发布