题意:
学生与课程数的对应
#include <bits/stdc++.h>
using namespace std;
#define se second
#define fi first
#define ll long long
#define CLR(a,b) memset(a,(b),sizeof(a))
const int MAXN = (int)1e3+10;
int k, m, n;
bool mps[MAXN][MAXN], used[MAXN];
int bl[MAXN];
bool find(int x) {
for(int i = 1; i <= n; ++i) { //枚举每个妹子的关系
if(mps[x][i] && used[i]== false) {
used[i] = true;
if(bl[i]==0 || find(bl[i])) {
bl[i] = x;
return true;
}
}
}
return false;
}
int main() {
ios::sync_with_stdio(false);
int T; cin >> T;
while(T--) {
CLR(mps, false); CLR(bl, 0);
int p, x; cin >> p >> n;
for(int i = 1; i <= p; ++i) {
cin >> k;
while(k--) {
cin >> x;
mps[i][x] = true;
}
}
int ans = 0;
for(int i = 1; i <= p; ++i) { // 汉子每次寻找妹子,初始化
CLR(used, false);
if(find(i)) ans++;
}
if(ans == p)
cout << "YES\n";
else
cout << "NO\n";
}
return 0;
}