페이지를 불러오는 중…
해결한 사람
1
명
정답률
100.00
%
시간 제한
40000
ms
메모리 제한
1024
MB
클래스 다이어그램을 진단하여 다이아몬드 상속이 발생한 경우를 식별하는 일을 도와야 한다. 다음 클래스 다이어그램의 예는 다이아몬드 상속의 성질을 보여 준다. A, B, C, D라는 네 개의 클래스가 있다. X에서 Y를 향하는 화살표는 클래스 X가 클래스 Y를 상속한다는 것을 나타낸다.

이 클래스 다이어그램에서 D는 B와 C를 모두 상속하고, B는 A를 상속하며, C도 A를 상속한다. X에서 Y로의 상속 경로는 클래스들의 수열 X, , , , ..., , Y로 정의된다. 여기서 X는 을 상속하고, 1 ≤ i ≤ n - 1에 대해 은 을 상속하며, 은 Y를 상속한다. 위 예에는 D에서 A로 가는 상속 경로가 두 개 있다. 첫 번째 경로는 D, B, A이고 두 번째 경로는 D, C, A이다.
서로 다른 두 클래스 X와 Y가 존재하여 X에서 Y로 가는 서로 다른 상속 경로가 적어도 두 개 있다면, 그 클래스 다이어그램은 다이아몬드 상속을 포함한다고 한다. 위 클래스 다이어그램은 다이아몬드 상속의 전형적인 예이다. 주어진 클래스 다이어그램이 다이아몬드 상속을 포함하는지 여부를 판별해야 한다.
메모리 제한: 1GB. 테스트 세트당 시간 제한: 40초. 1 ≤ T ≤ 50. 0 ≤ ≤ 10.
1 ≤ N ≤ 50.
1 ≤ N ≤ 1,000.
입력의 첫 번째 줄에는 테스트 케이스의 수 T가 주어진다. 이어서 각각 클래스 다이어그램 하나를 나타내는 T개의 테스트 케이스가 주어진다. 각 테스트 케이스의 첫 번째 줄에는 이 다이어그램의 클래스 수 N이 주어진다. 클래스에는 1부터 N까지 번호가 매겨져 있다. 이어서 N개의 줄이 주어진다. 번째 줄은 음이 아닌 정수 로 시작하며, 이는 클래스 i가 상속하는 클래스의 수를 나타낸다. 이어서 각각 1부터 N까지의 정수인 서로 다른 양의 정수 개가 주어지며, 이들은 클래스 i가 상속하는 클래스들을 나타낸다. 다음을 가정해도 좋다.
X에서 Y로 가는 상속 경로가 있다면 Y에서 X로 가는 상속 경로는 없다.
클래스는 절대로 자기 자신을 상속하지 않는다.
각 다이어그램마다 "Case #x: y"를 포함하는 한 줄을 출력한다. 여기서 x는 1부터 시작하는 케이스 번호이고, 클래스 다이어그램이 다이아몬드 상속을 포함하면 y는 "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
Copyright Google LLC; sourced from the Google Coding Competitions Archive.
로그인 상태를 확인하는 중입니다.