이 과제의 목표는 유한 방향성 비순환 그래프 (DAG) 로 주어지며 그래프가 전이 감소 인지 결정합니다 .
DAG 및 전이 감소가 무엇인지에 대한 간단한 설명 :
DAG는 그래프의 시작 노드가 주어지면 시작 노드로 돌아갈 수 없습니다 (즉, 사이클이 없음).
시작 노드가 주어지면 임의의 양의 수의 가장자리를 통해 그래프의 다른 끝 노드로 이동할 수 있으면 해당 끝 노드는 시작 노드에서 도달 가능한 것으로 정의됩니다. 일반적인 DAG에는 시작 노드에서 대상 끝 노드로 가져갈 수있는 여러 경로가있을 수 있습니다. 예를 들어이 다이아몬드 그래프를 보자.
노드로 이동하려면 D
에서 A
, 당신은 길을 갈 수 A->B->D
나 A->C->D
. 따라서에서 D
도달 할 수 있습니다 A
. 그러나 node에서 B
시작 하여 노드로 이동할 수있는 경로는 없습니다 C
. 따라서 node B
에서 node에 접근 할 수 없습니다 C
.
그래프 의 도달 가능성 을 그래프의 모든 시작 노드에 대한 도달 가능한 노드 목록으로 정의하십시오 . 동일한 다이아몬드 그래프 예에서 도달 가능성은 다음과 같습니다.
A: [B, C, D]
B: [D]
C: [D]
D: []
위의 그래프와 동일한 도달 가능성을 가진 다른 그래프는 다음과 같습니다.
그러나이 두 번째 그래프에는 원래 그래프보다 더 많은 모서리가 있습니다. 그래프의 전 이적 감소는 가장 적은 수의 에지와 원래 그래프의 도달 가능성이 동일한 그래프입니다. 첫 번째 그래프는 두 번째 그래프의 전 이적 감소입니다.
유한 한 DAG의 경우, 전이 감소가 존재하며 보장됩니다.
입력
입력은 "목록 목록"이며, 여기서 외부 목록은 정점 수의 길이를 가지며 각 내부 목록은 연관된 노드를 떠나는 가장자리 수의 길이이며 대상 노드의 색인을 포함합니다. 예를 들어, 위의 첫 번째 그래프를 설명하는 한 가지 방법은 다음과 같습니다 (0 기반 인덱싱 가정).
[[1, 2], [3], [3], []]
임의의 정수 값 (예 : 0 또는 1 기반 인덱싱)으로 첫 번째 노드의 인덱싱을 시작할 수 있습니다.
입력은 원하는 입력 소스 (stdio, function parameter 등)에서 올 수 있습니다. 추가 정보가없는 한 정확한 입력 형식을 자유롭게 선택할 수 있습니다. 예를 들어 stdio에서 입력을 받으려면 각 라인을 연관된 노드의 모서리 목록으로 만들 수 있습니다. 전의.:
1 2
3
3
'' (blank line)
각 인접 목록의 색인이 반드시 정렬 될 필요는 없으며 두 노드를 연결하는 여러 개의 모서리가있을 수 있습니다 (예 :) [[1,1],[]]
. 입력 그래프가 약하게 연결 되어 있고주기가 포함되어 있지 않다고 가정 할 수 있습니다 (예 : DAG).
산출
주어진 입력 DAG가 전 이적 감소이면 거짓이며, 그렇지 않으면 거짓 값입니다. 원하는 싱크 (스테 디오, 리턴 값, 출력 매개 변수 등) 일 수 있습니다.
예
모든 예제는 0 기반 인덱싱을 사용합니다.
[[1,2],[3],[3],[]]
true
[[1,2,3],[3],[3],[]]
false
[[1,1],[]]
false
[[1,2,3,4],[5,6,7],[5,8,9],[6,8,10],[7,9,10],[11,12],[11,13],[12,13],[11,14],[12,14],[13,14],[],[],[],[]]
true
[[5,6,7],[2,3,0,4],[5,8,9],[6,8,10],[7,9,10],[11,12],[11,13],[12,13],[11,14],[12,14],[13,14],[],[],[],[]]
true
[[5,6,7],[2,3,0,4,14,5,7],[5,8,9],[6,8,10],[7,9,10],[11,12],[11,13],[12,13],[11,14],[12,14],[13,14],[],[],[],[]]
false
[[5,6,7],[2,3,0,4],[5,8,9],[6,8,10],[7,9,10,14],[11,12],[11,13],[12,13],[11,14],[12,14],[13,14],[],[],[],[]]
false
[[1,3],[2],[3],[]]
false
채점
이것은 코드 골프입니다. 바이트 단위의 가장 작은 코드가 이깁니다. 코드는 적절한 시간 내에 완료해야합니다 (하드웨어에 관계없이 최대 10 분). 표준 허점이 적용됩니다. 원하는 내장 기능을 사용할 수 있습니다.