Всем привет! Я хотел решить такую задачу: надо найти три вершины, такие что, 2 пары связаны, но 3я пара не связана. Я искал в интернете, но не нашел того что искал
№ | Пользователь | Рейтинг |
---|---|---|
1 | tourist | 4009 |
2 | jiangly | 3823 |
3 | Benq | 3738 |
4 | Radewoosh | 3633 |
5 | jqdai0815 | 3620 |
6 | orzdevinwang | 3529 |
7 | ecnerwala | 3446 |
8 | Um_nik | 3396 |
9 | ksun48 | 3390 |
10 | gamegame | 3386 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | cry | 167 |
2 | Um_nik | 163 |
3 | maomao90 | 162 |
4 | atcoder_official | 161 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 157 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
9 | nor | 153 |
Всем привет! Я хотел решить такую задачу: надо найти три вершины, такие что, 2 пары связаны, но 3я пара не связана. Я искал в интернете, но не нашел того что искал
Название |
---|
Допустим есть граф с $$$n$$$ вершинами и $$$m$$$ рёбрами, и мы хотим найти три вершины $$$a$$$, $$$b$$$, $$$c$$$ такие, что есть рёбра $$$a-b$$$ и $$$b-c$$$, но нет ребра $$$a-c$$$. Напишем функцию
check(b)
, которая находит такую тройку для заданной вершины $$$b$$$.Вызовем
check
от вершины с самым большим количеством соседей — пусть это количество равно $$$k$$$. Тогда эта функция отработает за $$$O(min(k^2,m))$$$, поскольку каждый цикл проходится по $$$k$$$ вершинам, но с другой стороны условиеa и c не смежны
не может более $$$m$$$ раз вернутьfalse
, так как всего есть $$$m$$$ рёбер.Итак, если мы получили ответ, то всё хорошо, алгоритм отработал не больше, чем за $$$O(n+m)$$$. Иначе все $$$k$$$ соседей вершины $$$b$$$ связаны между собой и связаны с вершиной $$$b$$$. Следовательно их степень $$$\ge (k-1)+1=k$$$. Но ведь начальная вершина $$$b$$$ имеет наибольшую степень — $$$k$$$. Значит все рассмотренные вершины связаны только друг с другом, и больше ни с кем. Понятно, что из них никак не составить "почти треугольник". Поэтому забудем про все эти $$$k+1$$$ вершину и начнём алгоритм заново без этих вершин. Повторяя так много раз, алгоритм либо найдёт нужную тройку вершин, либо удалит все вершины и скажет, что искомой тройки не существует.