Вот ваш O(V)
алгоритм:
def hasCycles(G, V, E):
if E>=V:
return True
else:
# here E<V
# perform O(E+V) = O(V) algorithm
...
... можно выполнить с помощью DFS. Если у вас есть E<V
и ребра хранятся осмысленным образом (в виде списка), вы, вероятно, можете сделать O (E) + журналы, которые сделали бы весь алгоритм O(min(E,V))+logs
.
Надеюсь, вам понравится этот ответ, хотя и немного поздно!