Plan de cursos II

Tiempo límite 2 s
Memoria límite 256 MB
Casos de prueba 10
Dificultad Medio Algoritmos
Mostrar (3) GrafosHeaps (colas de prioridad)Orden topológico
Enviar solución

Puntos: 10

Tipos de problema
Lenguajes permitidos
C, C++, Java, Python, Rust

Hay \(n\) cursos, numerados de \(0\) a \(n - 1\), y \(m\) requisitos: el par \(b\) \(a\) significa que para tomar el curso \(b\) primero hay que aprobar el \(a\). Encuentra un orden en que se pueden tomar todos los cursos.

Para que la respuesta sea única, imprime el orden lexicográficamente menor: en cada paso, entre los cursos que ya se pueden tomar, va el de menor número. Si no existe ningún orden (hay requisitos circulares), imprime -1.

Entrada

La primera línea tiene \(n\) \((1 \le n \le 10^5)\) y \(m\) \((0 \le m \le 2 \cdot 10^5)\). Cada una de las siguientes \(m\) líneas tiene un requisito \(b\) \(a\) \((b \ne a)\). No hay requisitos repetidos.

Salida

Los \(n\) cursos en el orden pedido, separados por espacios, o -1.

Ejemplo 1

Entrada

2 1
1 0

Salida

0 1

Ejemplo 2

Entrada

4 4
1 0
2 0
3 1
3 2

Salida

0 1 2 3

Ejemplo 3

Entrada

2 2
1 0
0 1

Salida

-1

Ejemplo 4

Entrada

1 0

Salida

0

Comentarios

No hay comentarios por el momento.