Изменения

Перейти к: навигация, поиск
Нет описания правки
== Алгоритм ==
Запустим {{Теорема|statement=Пусть <tex>T</tex> - дерево [[Обход в глубину, цвета вершин|обход обхода в глубину]] из произвольной вершины , <tex>root</tex> графа - корень <tex>G(V, E)T</tex>. Рассмотрим Вершина <tex>u \ne root</tex> - точка сочленения <tex>\Leftrightarrow \exists v \in VT</tex> - сын <tex>u</tex>:из <tex>v</tex> или любого потомка вершины <tex>v</tex> нет обратного ребра в предка вершины <tex>u</tex>. <tex>root</tex> - точка сочленения <tex>\Leftrightarrow root</tex> имеет хотя бы двух сыновей в дереве поиска в глубину.|proof=<tex>\Leftarrow</tex> #Удалим <tex>u </tex> из <tex>G</tex>. Докажем, что <tex>\ne rootnexists</tex> пути из <tex>v</tex> в любого предка вершины <tex>u</tex>. Пусть это не так. Тогда<tex>\exists x \in T</tex> - предок <tex>u</tex> : <tex>\exists</tex> путь из <tex>v</tex> в <tex>x</tex> в <tex>G \backslash u</tex>. Пусть <tex>w</tex> - предпоследняя вершина на этом пути, если найдётся такой <tex>w</tex> - потомок <tex>v</tex> вершины . <tex>(w, x)</tex> - не ребро дерева <tex>uT</tex> (в силу единственности пути в дереве поиска) <tex>\Rightarrow (w, x)</tex> - обратное ребро, что противоречит условию.#Пусть <tex>root</tex> - точка сочленения и у него есть только 1 сын. Тогда при удалении <tex>root</tex> остается дерево с корнем в его сыне, содержащее все остальные вершины графа, то есть оставшийся граф связен - противоречие с тем, что ни <tex>root</tex> - точка сочленения.<tex>\Rightarrow</tex> #Докажем что из негоотрицания второго утверждения следует отрицание первого. Обозначим через <tex>G'</tex> граф, ни состоящий из какого-либо его потомка нет ребра в предка вершин, не являющихся потомками <tex>u</tex>. Удалим вершину <tex>u</tex>. Очевидно, что граф <tex>G'</tex> и все поддеревья вершины <tex>u</tex>останутся связными, то вершина кроме того из каждого поддерева есть ребро в <tex>G' \Rightarrow G \backslash u</tex> будет являться точкой сочленения. В противном случае, вершина - связный <tex>\Rightarrow u</tex> - не является точкой точка сочленения.#Пусть у <tex>u = root</tex>хотя бы два сына. Тогда при удалении <tex>uroot \, \nexists</tex> - точка сочленения пути между его поддеревьями, так как не существует перекрестных ребер <tex>\Leftrightarrow uRightarrow root</tex> имеет хотя бы двух сыновей в дереве поиска в глубину- точка сочленения.}}
Пусть <tex>tin[u]</tex> - время входа поиска в глубину в вершину <tex>u</tex>. Через <tex>up[u]</tex> обозначим минимум из времени захода в саму вершину <tex>tin[u]</tex>, времен захода в каждую из вершин <tex>p</tex>, являющуюся концом некоторого обратного ребра <tex>(u,p)</tex>, а также из всех значений <tex>up[v]</tex> для каждой вершины <tex>v</tex>, являющейся непосредственным сыном <tex>u</tex> в дереве поиска.
Анонимный участник

Навигация