Para um dado DAG (gráfico acíclico direcionado), cada um de seus tipos topológicos é uma permutação de todos os vértices, onde para todas as arestas (u, v) no DAG, u aparece antes de v na permutação.
Sua tarefa é calcular o número total de tipos topológicos de um determinado DAG.
Regras
- Você pode usar qualquer formato para representar o gráfico, como matriz de adjacências, lista de adjacências ou lista de arestas, desde que não faça cálculos úteis em sua codificação. Você também pode ter itens como contagem de vértices ou lista de vértices na entrada, se forem úteis.
- Você pode assumir que o gráfico na entrada é sempre um DAG (não possui ciclos).
- Seu programa deve funcionar em teoria para qualquer entrada. Mas pode falhar se exceder o tipo inteiro básico no seu idioma.
- Os nomes dos vértices podem ser quaisquer valores consecutivos em qualquer tipo. Por exemplo: números começando em 0 ou 1. (E somente se você não estiver armazenando código nesse número, é claro).
- Isso é código-golfe. O menor código vence.
Exemplo
Esta é a mesma entrada em diferentes formatos. Seu programa não precisa aceitar todos eles. Os vértices são sempre números inteiros começando em 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] ]
É o gráfico mostrado nesta imagem:
A saída deve ser:
9
Os tipos topológicos são:
[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]