Para un DAG dado (gráfico acíclico dirigido), cada uno de sus tipos topológicos es una permutación de todos los vértices, donde para cada borde (u, v) en el DAG, u aparece antes de v en la permutación.
Su tarea es calcular el número total de tipos topológicos de un DAG dado.
Reglas
- Puede usar cualquier formato para representar el gráfico, como la matriz de adyacencia, la lista de adyacencia o la lista de bordes, siempre que no realice cálculos útiles en su codificación. También puede tener cosas como conteo de vértices o lista de vértices en la entrada, si son útiles.
- Puede suponer que el gráfico en la entrada siempre es un DAG (no tiene ningún ciclo).
- Su programa debería funcionar en teoría para cualquier entrada. Pero puede fallar si desborda el tipo entero básico en su idioma.
- Los nombres de vértices pueden ser cualquier valor consecutivo en cualquier tipo. Por ejemplo: números que comienzan en 0 o 1. (Y solo si no está almacenando código en este número, por supuesto).
- Este es el código de golf. El código más corto gana.
Ejemplo
Esta es la misma entrada en diferentes formatos. Su programa no tiene que aceptarlos todos. Los vértices son siempre enteros comenzando en 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] ]
Es el gráfico que se muestra en esta imagen:
La salida debe ser:
9
Los tipos topológicos son:
[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]