Уведомления

Группа в Telegram: @pythonsu

#1 Март 20, 2019 21:38:15

T0t0ro
Зарегистрирован: 2019-03-20
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Параллельные рёбра

Ориентированный граф задан списком ребер. Проверьте, содержит ли он параллельные ребра.
Входные данные
Сначала вводятся числа n ( 1 ≤n ≤100) – количество вершин в графе
и m ( 1≤10 000) – количество ребер. Затем следует m пар чисел – ребра графа.
Выходные данные
Выведите «YES», если граф содержит параллельные ребра, и «NO» в противном случае.
Примеры входные данные
5 3
2 5
3 1
3 2
выходные данные
NO

Офлайн

#2 Март 21, 2019 00:35:47

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

Параллельные рёбра

Параллельные рёбра - это типа 5 3 и 3 5. То есть рёбра у которых одни и те же вершины.

Главное, что тут не надо считывать всё. Можно использовать множество set() в которое добавлять отсортированные пары вершин. Как только пара уже содержится во множестве, можно прерывать считывание и писать YES. Если рёбер в графе миллион, это имеет значение. Тут же их может быть 10000, но при этом на первых же двух рёбрах может быть то, что они параллельные, и поэтому считывать дальше ничего не надо.



Офлайн

#3 Март 21, 2019 06:17:56

T0t0ro
Зарегистрирован: 2019-03-20
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Параллельные рёбра

py.user.next
Параллельные рёбра - это типа 5 3 и 3 5. То есть рёбра у которых одни и те же вершины.Главное, что тут не надо считывать всё. Можно использовать множество set() в которое добавлять отсортированные пары вершин. Как только пара уже содержится во множестве, можно прерывать считывание и писать YES. Если рёбер в графе миллион, это имеет значение. Тут же их может быть 10000, но при этом на первых же двух рёбрах может быть то, что они параллельные, и поэтому считывать дальше ничего не надо.

Да я понимаю. Просто догнать не могу, как допустим циклом правильно перебор сделать

Офлайн

#4 Март 21, 2019 07:22:13

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9726
Репутация: +  843  -
Профиль   Отправить e-mail  

Параллельные рёбра

  
>>> def f():
...     s = input()
...     n, m = map(int, s.split())
...     st = set()
...     for _ in range(m):
...         s = input()
...         a, b = map(int, s.split())
...         t = min(a, b), max(a, b)
...         if t not in st:
...             st.add(t)
...         else:
...             break
...     if len(st) == m:
...         print('NO')
...     else:
...         print('YES')
... 
>>> f()
5 3
2 5
3 1
3 2
NO
>>> f()
5 2
2 5
3 1
NO
>>> f()
5 2
3 1
1 3
YES
>>> f()
5 4
1 2
3 4
5 2
2 1
YES
>>> 



Офлайн

#5 Март 21, 2019 19:22:38

T0t0ro
Зарегистрирован: 2019-03-20
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Параллельные рёбра

py.user.next
ммм, правда хороший цикл, возьму себе на заметку. Спасибо!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version