e-olymp 5073. Проверка на наличие параллельных ребер (ОГ)

Ориентированный граф задан списком ребер.

Проверьте, содержит ли он параллельные ребра.

Входные данные

Входной файл содержит числа [latex]n(1\leq n\leq 100)[/latex] — число вершин в графе и [latex]m(1\leq m\leq 10000)[/latex]  — число ребер. Затем следует [latex]m[/latex] пар чисел — ребра графа.

Выходные данные

Выведите в выходной файл YES если граф содержит параллельные ребра и NO в противном случае.

Задача на e-olimp. Ссылка на засчитанное решение.

Входные данные Выходные данные
3 4
1 2
2 3
1 3
2 1
NO
3 4
1 2
2 3
1 3
2 3
YES

Код задачи:

Ссылка на ideone.

Алгоритм решения:

Сначала, добавим пару вершин в разные массивы так, чтоб нулевой элемент массива [latex]v[i][/latex] был началом ребра, а нулевой элемент массива [latex]g[i][/latex] — концом ребра и т.д. После этого в цикле будем сравнивать поочередно пары вершин до тех пор, пока не узнаем, что такая пара вершин уже встречалась, в таком случае выводим YES и завершаем цикл. В противном случае, если наше условие не выполнилось ни разу (т.е. переменная [latex]k[/latex] как была нулем в начале программы, так и осталась) выводим NO.

Код на Java

 

Related Images:

One thought on “e-olymp 5073. Проверка на наличие параллельных ребер (ОГ)

  1. Огромный недостаток e-olymp.com это бедные тесты к многим задачам. В результате такое решение как у Вас не отсекается по времени. Снял баллы за неэффективное решение.
    Какие конкретно замечания:
    1. Вы проверяете все различные пары ребер. Это квадратичная сложность.
    2. Вместо двух вложенных циклов for, Вы делаете один из них циклом while, усложняя восприятие программы
    Правильно задача решается прямо во время ввода данных. И даже не требует чтения их до конца если кратное ребро уже встретилось. При таких ограничениях на количество вершин в олимпиадном стиле задача решается так:

Добавить комментарий