GT and set

Accepts: 35
Submissions: 194
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
问题描述
有$N$个集合,每个集合中有$A_i$个数。
你要将这$N$个集合划成$L$个部分,使得每个部分的集合至少有一个共有的数。
如果至少有一个解输出$YES$,否则输出$NO$
输入描述
第一行一个数T表示数据组数。($T$$\leq$$20$)

对于每一组数据:
第一行两个数$N$和$L$。
接下来$N$行每行描述一个集合:
第一个数$A_i$表示该集合的大小,之后$x$个互不相同的整数表示该集合的元素。
集合里的数字都是正整数且不大于$300$.

$1\leq$$N$$\leq30$,$1\leq$$L\leq5$,$1\leq$$A_i$$\leq10$,$1 \leq L \leq N$

hack时建议输出最后一行的行末回车;每一行的结尾不要输出空格。
输出描述
对于每组数据输出一行$YES$或$NO$
输入样例
2
2 1
1 1
1 2
3 2
3 1 2 3
3 4 5 6
3 2 5 6
输出样例
NO
YES
Hint
对于第二个样例,有三个集合{1 2 3},{4 5 6},{2 5 6} 你要划成两个部分。
有一种方案是把第二个和第三个集合划成一个部分,第一个在另一个部分。有一种方案是把第二个和第三个集合划成一个部分,第一个在另一个部分。 第二个和第三个集合的数字有一个交集{6},所以合法。
还有一种划分方案就是把第一个和第三个集合划成一个部分,第二个在另一个部分。