Можно найти компоненты сильной связности. Это делается за O(n^2). Их будет не больше тысячи.
Внутри каждой компоненты между любыми двумя вершинами будет путь.
Граф из компонент сильной связности будет ациклическим.
Из вершин в одной компоненте есть пути во всех ее потомков в других компонентах. Обратно - нет.
Так как компонент будет не более 1000, то ациклическую часть можно решать за квадрат.
Итого O(N^2)