Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Сначала вводится часть входных данных, а именно
- # N, M и заполняется список смежности. Затем проходит
- # заполнение другого списка, элементы которого - это
- # списки вершин входящих в одну компоненту связности.
- # После этого вводится Q - количество запросов, и сами запросы.
- # При запросе происходит обращение к спискам связности, и если обе
- # введенные вершины входят в одну компоненту связности,
- # то выводится True, если нет, то False
- # Ввод 1:
- # Во вводе нет ничего интересного, просто список G заполняется по количеству
- # вершин пустыми списками, в которые потом вкладываются индексы смежных вершин.
- N=int(input())
- M=int(input())
- G=[[] for i in range(N+1)]
- for i in range(M):
- s=input()
- l=s.split()
- G[int(l[0])].append(int(l[1]))
- G[int(l[1])].append(int(l[0]))
- # Основная рабочая функция:
- # Прежде всего заводится список меток, для отметки посещенных вершин.
- a=[0 for i in range(N+1)]
- # Сама функция работает с локальной переменной - номером вершины,
- # и глобальной - списком меток. При этом все посещенные вершины
- # записываются в список com.
- # Функция рекурсивная и вызывает саму себя для всех непосещенных вершин, смежных текущей.
- # При этом происходит поиск в глубину, и отмечаются только вершины входящие в компоненту связности.
- # Итог работы функции - компонента связности,
- # содержащая данную вершину.
- def f(i,com):
- if a[i] == 0:
- a[i]=1
- for j in G[i]:
- com += f(j,[])
- com.append(i)
- return com
- # Заполнение списка компонент.
- # При вызове функции для уже посещенной вершины, в список добавляется пустая компонента,
- # чтобы далее не загружать код лишней пробежкой по пустоте, все пустые списки вырезаются.
- list_of_com=[]
- for i in range(1,N+1):
- list_of_com.append(f(i,[]))
- if list_of_com[-1]==[]:
- list_of_com.pop(-1)
- # Запросы (Ввод 2)
- # Каждый запрос обрабатывается в цикле,где основную роль играет флажок flag, по умолчанию ложный.
- # Перебираются все компоненты связности, для каждой проверяется условие об общей компоненте связности.
- # При выполнении условия, флаг сменяет значение на правду.
- # Значение флажка - ответ на запрос.
- Q=int(input())
- for i in range(Q):
- flag=False
- s=input()
- l=s.split()
- for j in list_of_com:
- if int(l[0]) in j and int(l[1]) in j:
- flag=True
- print(flag)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement