H. Есть ли цикл
Неориентированный граф задан списком рёбер. Проверьте, есть ли в нём цикл.
Обходом это проверяется так: если из вершины мы видим уже посещённого соседа, который не является тем, откуда мы пришли, — цикл найден.
Два ребра между одними и теми же вершинами уже образуют цикл, а петля — цикл длины один.
Про «откуда пришли» стоит сказать точно. Если запоминать номер вершины-родителя и пропускать все рёбра в него, ответ всё равно получится верным: второе ребро между теми же вершинами увидит сам родитель, когда вернётся к перебору своих соседей. Проверено перебором на тридцати тысячах случайных мультиграфов — расхождений нет. Но запоминать номер ребра надёжнее: тогда рассуждение не зависит от того, с какой стороны обход дошёл до ребра, и переносится на задачи, где такой оговорки уже не будет.
Формат ввода
Первая строка содержит числа () и ().
Далее идут строк с рёбрами. Возможны петли и кратные рёбра.
Формат вывода
Слово «YES», если цикл есть, и «NO» иначе.
Примеры
3 3 1 2 2 3 3 1
YES
2 2 1 2 1 2
YES