#P13321. [GCJ 2012 #1C] Diamond Inheritance
[GCJ 2012 #1C] Diamond Inheritance
Description
你需要帮助诊断类图,以识别菱形继承的实例。下面的类图示例说明了菱形继承的特性。共有四个类: 和 。箭头从 指向 表示类 继承自类 。

在这个类图中, 同时继承自 和 , 继承自 ,而 也继承自 。从 到 的继承路径被定义为一个类序列 ,其中 继承自 ,对于 , 继承自 , 继承自 。在上面的例子中,从 到 存在两条继承路径。第一条路径为 ,第二条路径为 。
如果存在一对类 和 ,使得从 到 存在至少两条不同的继承路径,则称该类图包含菱形继承。上面的类图就是菱形继承的经典示例。你的任务是判断给定的类图是否包含菱形继承。
Input Format
输入的第一行为测试用例数 。接下来有 组测试数据,每组描述一个类图。每组数据的第一行为该类图的类数 。类的编号为 到 。接下来有 行。第 行以一个非负整数 开头,表示第 个类继承的类的数量。随后是 个不同的正整数,范围均为 到 ,表示这些被继承的类。你可以假设:
- 如果存在从 到 的继承路径,则不存在从 到 的继承路径。
- 不会有类继承自身。
Output Format
对于每个类图,输出一行 "Case #: ",其中 为测试用例编号(从 开始), 若该类图包含菱形继承则为 "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
限制条件
测试集 1(14 分,结果可见)
测试集 2(14 分,结果隐藏)
翻译由 ChatGPT-4.1 完成。
京公网安备 11011102002149号