주어진 DAG (지향 비순환 그래프)의 경우, 각 위상 정렬은 모든 정점의 순열이며 , DAG의 모든 모서리 (u, v) 에 대해 u 가 순열에서 v 앞에 나타납니다 .
주어진 DAG의 총 토폴로지 종류 수를 계산해야합니다.
규칙
- 인코딩에서 유용한 계산을 수행하지 않는 한 임의의 형식을 사용하여 인접 행렬, 인접 목록 또는 가장자리 목록과 같은 그래프를 나타낼 수 있습니다. 유용한 경우 입력에 꼭짓점 개수 또는 꼭짓점 목록과 같은 항목이있을 수도 있습니다.
- 입력의 그래프가 항상 DAG라고 가정 할 수 있습니다 (사이클이 없음).
- 프로그램은 모든 입력에 대해 이론적으로 작동해야합니다. 그러나 언어의 기본 정수 유형이 오버플로되면 실패 할 수 있습니다.
- 꼭짓점의 이름은 모든 유형의 연속 값일 수 있습니다. 예를 들어 숫자는 0 또는 1로 시작합니다 (물론이 숫자에 코드를 저장하지 않은 경우에만 해당).
- 이것은 코드 골프입니다. 가장 짧은 코드가 승리합니다.
예
이것은 다른 형식의 동일한 입력입니다. 당신의 프로그램은 그것들을 모두 받아 들일 필요는 없습니다. 꼭짓점은 항상 0부터 시작하는 정수입니다.
Adjacency list:
[ [1 2 3 5] [2 4] [] [2] [] [3] ]
Adjacency matrix:
[ [0 1 1 1 0 1] [0 0 1 0 1 0] [0 0 0 0 0 0] [0 0 1 0 0 0] [0 0 0 0 0 0] [0 0 0 1 0 0] ]
Edge list:
6 [ [0 1] [0 2] [0 3] [0 5] [1 2] [1 4] [3 2] [5 3] ]
이 이미지에 표시된 그래프입니다.
출력은 다음과 같아야합니다.
9
토폴로지 종류는 다음과 같습니다.
[0 1 4 5 3 2]
[0 1 5 4 3 2]
[0 1 5 3 4 2]
[0 1 5 3 2 4]
[0 5 1 4 3 2]
[0 5 1 3 4 2]
[0 5 1 3 2 4]
[0 5 3 1 4 2]
[0 5 3 1 2 4]