
Вам дается ориентированный граф из n узлов, пронумерованных от 0 до n - 1, где каждый узел имеет не более одного исходящего ребра.
Граф представлен заданным 0-индексированным массивом ребер размера n, указывающим на то, что существует направленное ребро от узла i к узлу edges[i]. Если нет исходящего ребра из узла i, то edges[i] == -1.
Верните длину самого длинного цикла на графе. Если цикл не существует, верните значение -1.
Цикл – это путь, который начинается и заканчивается в одном и том же узле.

Входные данные: edges = [3,3,4,2,3]
Результат: 3
Пояснение: Самый длинный цикл графа – это цикл: 2 -> 4 -> 3 -> 2, поэтому возвращается число 3.

Входные данные: edges = [2,-1,3,1]
Результат: -1
Пояснение: Граф не содержит циклов.
class Solution {
public:
int longestCycle(vector<int>& edges) {
}
};
Нам дан ориентированный граф с n узлами, пронумерованными от 0 до n - 1. Каждый узел имеет не более одного исходящего ребра, заданного edges.
Наша задача состоит в том, чтобы вернуть длину самого длинного цикла на графике. Если цикла не существует, нам нужно вернуть значение -1.
Проблема указывает на то, что каждый узел имеет не более одного исходящего ребра. Давайте посмотрим, какие типы графов мы можем создать с помощью этого.
Рассмотрим узел node, у которого есть цикл. Это означало бы, что единственное исходящее ребро узла также будет находиться в этом цикле. В результате узел не может быть частью какого-либо другого цикла, поскольку у него есть только одно исходящее ребро, которое используется в этом цикле. Это демонстрирует, что в графе только с одним исходящим ребром узел не может быть частью более чем одного цикла.