GRID//RUNNER

COURSE SCHEDULE MEDIUM

problema

Há n matérias, numeradas de 0 a n − 1. Cada item [a, b] da lista pre diz que é preciso cursar b antes de a. Retorne true se for possível cursar todas as matérias.

Visto como grafo dirigido, cada [a, b] é uma seta b → a. Só é impossível quando há um ciclo: as matérias do ciclo esperam umas pelas outras e nenhuma pode ser a primeira.

Exemplo 1 · n = 3, pre = [[1,0],[2,1],[2,0]] → true

Ordem possível: 0, 1, 2.

Exemplo 2 · n = 6, o exemplo 1 mais [[4,3],[5,4],[3,5]] → false

3 → 4 → 5 → 3 é um ciclo. É o exemplo animado abaixo.

Restrições: 1 ≤ n ≤ 2000 · 0 ≤ pre.length ≤ 5000 · pares [a, b] distintos, com a ≠ b