Задан ацикличный ориентированный граф, состоящий из $$$n$$$ вершин и $$$m$$$ ребер. Граф не содержит кратных ребер и петель.
Вершина называется истоком, если в нее не входит ребер. Вершина называется стоком, если из нее не исходит ребер. Эти определения подразумевают, что некоторые вершины могут быть одновременно истоком и стоком.
Количество истоков в графе равно количеству стоков, и это число не превосходит $$$20$$$.
К графу применяется следующий алгоритм:
В конце проверяется, стал ли граф сильно связным (любая вершина достижима из любой другой).
Ваша задача — проверить, что граф становится сильно связным вне зависимости от выбора истоков и стоков на втором шаге алгоритма.
В первой строке записаны два целых числа $$$n$$$ и $$$m$$$ ($$$1 \le n, m \le 10^6$$$) — количество вершин и количество ребер в графе, соответственно.
В каждой из следующих $$$m$$$ строк записаны по два целых числа $$$v_i, u_i$$$ ($$$1 \le v_i, u_i \le n$$$, $$$v_i \ne u_i$$$) — описание $$$i$$$-го ребра изначального графа.
Гарантируется, что количество истоков равно количеству стоков, и это число не превышает $$$20$$$. Гарантируется, что граф не содержит кратных ребер. Гарантируется, что граф не содержит циклов.
Выведите «YES», если граф становится сильно связным вне зависимости от выбора истоков и стоков на втором шаге алгоритма. В противном случае выведите «NO».
3 1
1 2
NO
3 3
1 2
1 3
2 3
YES
4 4
1 2
1 3
4 2
4 3
YES
Название |
---|