#P13321. [GCJ 2012 #1C] Diamond Inheritance

    ID: 13135 远端评测题 4000ms 1024MiB 尝试: 0 已通过: 0 难度: 5 上传者: 标签>搜索2012深度优先搜索 DFSGoogle Code Jam

[GCJ 2012 #1C] Diamond Inheritance

Description

你需要帮助诊断类图,以识别菱形继承的实例。下面的类图示例说明了菱形继承的特性。共有四个类:A,B,CA, B, CDD。箭头从 XX 指向 YY 表示类 XX 继承自类 YY

在这个类图中,DD 同时继承自 BBCCBB 继承自 AA,而 CC 也继承自 AA。从 XXYY 的继承路径被定义为一个类序列 X,C1,C2,C3,,Cn,YX, C_1, C_2, C_3, \dots, C_n, Y,其中 XX 继承自 C1C_1,对于 1in11 \leq i \leq n-1CiC_i 继承自 Ci+1C_{i+1}CnC_n 继承自 YY。在上面的例子中,从 DDAA 存在两条继承路径。第一条路径为 D,B,AD, B, A,第二条路径为 D,C,AD, C, A

如果存在一对类 XXYY,使得从 XXYY 存在至少两条不同的继承路径,则称该类图包含菱形继承。上面的类图就是菱形继承的经典示例。你的任务是判断给定的类图是否包含菱形继承。

Input Format

输入的第一行为测试用例数 TT。接下来有 TT 组测试数据,每组描述一个类图。每组数据的第一行为该类图的类数 NN。类的编号为 11NN。接下来有 NN 行。第 ii 行以一个非负整数 MiM_i 开头,表示第 ii 个类继承的类的数量。随后是 MiM_i 个不同的正整数,范围均为 11NN,表示这些被继承的类。你可以假设:

  • 如果存在从 XXYY 的继承路径,则不存在从 YYXX 的继承路径。
  • 不会有类继承自身。

Output Format

对于每个类图,输出一行 "Case #xx: yy",其中 xx 为测试用例编号(从 11 开始),yy 若该类图包含菱形继承则为 "Yes",否则为 "No"。

3
3
1 2
1 3
0
5
2 2 3
1 4
1 5
1 5
0
3
2 2 3
1 3
0
Case #1: No
Case #2: Yes
Case #3: Yes

Hint

限制条件

  • 1T501 \leq T \leq 50
  • 0Mi100 \leq M_i \leq 10

测试集 1(14 分,结果可见)

  • 1N501 \leq N \leq 50

测试集 2(14 分,结果隐藏)

  • 1N1,0001 \leq N \leq 1,000

翻译由 ChatGPT-4.1 完成。