QOJ.ac

QOJ

时间限制: 8 s 内存限制: 1024 MB 总分: 28

#5890. 钻石继承

统计

你需要帮助诊断类图以识别菱形继承的实例。以下类图示例展示了菱形继承的特性。图中共有四个类:A、B、C 和 D。从 X 指向 Y 的箭头表示类 X 继承自类 Y。

在此类图中,D 同时继承自 B 和 C,B 继承自 A,C 也继承自 A。从 X 到 Y 的继承路径定义为类序列 $X, C_1, C_2, C_3, \dots, C_n, Y$,其中 X 继承自 $C_1$,对于 $1 \le i \le n - 1$,$C_i$ 继承自 $C_{i + 1}$,且 $C_n$ 继承自 Y。在上述示例中,从 D 到 A 有两条继承路径。第一条路径是 D, B, A,第二条路径是 D, C, A。

如果存在一对类 X 和 Y,使得从 X 到 Y 至少存在两条不同的继承路径,则称该类图包含菱形继承。上述类图是菱形继承的经典示例。你的任务是确定给定的类图是否包含菱形继承。

输入格式

输入的第一行包含测试用例的数量 $T$。接下来是 $T$ 个测试用例,每个测试用例描述一个类图。每个测试用例的第一行给出该图中的类数量 $N$。类编号从 1 到 $N$。接下来有 $N$ 行。第 $i$ 行以一个非负整数 $M_i$ 开头,表示类 $i$ 继承的类的数量。随后是 $M_i$ 个不同的正整数(每个都在 1 到 $N$ 之间),表示这些被继承的类。你可以假设:

  • 如果存在从 X 到 Y 的继承路径,则不存在从 Y 到 X 的继承路径。
  • 类永远不会继承自自身。

输出格式

对于每个类图,输出一行 "Case #x: y",其中 $x$ 是测试用例编号(从 1 开始),如果类图包含菱形继承,则 $y$ 为 "Yes",否则为 "No"。

数据范围

$1 \le T \le 50$。 $0 \le M_i \le 10$。

子任务 1

$1 \le N \le 50$。

子任务 2

$1 \le N \le 1,000$。

样例

样例输入 1

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

样例输出 1

Case #1: No
Case #2: Yes
Case #3: Yes

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.