#3559. 【国庆集训 Day2D】分组

【国庆集训 Day2D】分组

题面描述

有 nn 个人,其中有一些人是朋友。朋友关系是双向的。

现在你需要将 nn 个人分成若干组,满足以下两个条件:

  • 每组最多 pp 个人。
  • 对于每一组,最多有 qq 对朋友满足其中一个人在该组内,另一个人在该组外。

现在每个人都会告诉你他的朋友有哪些,你需要判断是否有人记错了。

更清晰的表述是:给定每个人的朋友集合,你需要判断朋友关系是否是双向的,并且有合法的分组条件。如果是双向的且有合法的分组方案,则输出任意一种合法的分组方案。否则输出 NO。

输入格式

第一行三个整数分别表示 n,p,qn,p,q。

接下来 nn 行,对于第 ii 行,第一个整数 mim_i 表示第 ii 个人的朋友集合。接下来 mim_i 个整数表示他的 mim_i 个朋友。

注意:人从 00 开始标号。

输出格式

如果朋友不是双向的或不存在合法分组,输出 NO。

否则第一行输出 YES。第二行输出一个整数 ss 表示组数。接下来 ss 行,每行表示一组。第一个数表示组的大小,接下来若干个数为该组内学生的编号。

注意:如果有多组合法方案,输出任意一种

4 2 1
1 1
2 0 2
2 1 3
1 2
YES
2
2 0 1
2 2 3
5 2 1
1 1
2 0 2
2 1 3
2 2 4
1 3
NO
3 3 3
2 1 2
2 0 2
1 0
NO

数据范围与约定

对于 100%100\% 的数据,保证 1≤n≤2500,p+q≤15,∑m≤3×1041\le n \le 2500,p+q\le 15,\sum m \le 3\times 10^4。

保证每个人的朋友集合中不会有他自己。

本题采用捆绑测试。

子任务 11(2020 分):n≤16n\le 16。

子任务 22(3737 分):n≤250,q≤2n\le 250, q\le 2。

子任务 33(1212 分):q≤2q\le 2。

子任务 44(3131 分):无特殊限制。