Dla danego DAG (ukierunkowanego wykresu acyklicznego) każdy z jego rodzajów topologicznych jest permutacją wszystkich wierzchołków, gdzie dla każdej krawędzi (u, v) w DAG u występuje przed v w permutacji.
Twoim zadaniem jest obliczenie całkowitej liczby rodzajów topologicznych danego DAG.
Zasady
- Możesz użyć dowolnego formatu do przedstawienia wykresu, takiego jak macierz przylegania, lista przylegania lub lista krawędzi, o ile nie wykonasz przydatnych obliczeń w kodowaniu. Na wejściu można także umieścić takie elementy, jak liczba wierzchołków lub lista wierzchołków, jeśli są one przydatne.
- Możesz założyć, że wykres na wejściu jest zawsze DAG (nie ma żadnych cykli).
- Twój program powinien działać teoretycznie dla każdego wejścia. Ale może się nie powieść, jeśli przepełni podstawowy typ liczb całkowitych w twoim języku.
- Nazwy wierzchołków mogą być dowolnymi kolejnymi wartościami dowolnego typu. Na przykład: liczby zaczynające się od 0 lub 1. (I oczywiście tylko wtedy, gdy nie zapisujesz kodu w tym numerze).
- To jest golf golfowy. Najkrótszy kod wygrywa.
Przykład
To samo wejście w różnych formatach. Twój program nie musi akceptować wszystkich. Wierzchołki są zawsze liczbami całkowitymi zaczynającymi się od 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] ]
Jest to wykres pokazany na tym obrazku:
Dane wyjściowe powinny być:
9
Rodzaje topologiczne to:
[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]