"Информатика (базовый и углублённый уровень)", Гейн А.Г., Сенокосов А.И.
Мосты и точки сочленения — уязвимые элементы связного графа. Мостом называют ребро, удаление которого разделяет граф на большее число компонент, а точкой сочленения — вершину, удаление которой делает то же самое. Эти понятия помогают находить критические дороги, каналы связи и узлы сетей. Для эффективного поиска используют обход в глубину и сравнивают времена посещения вершин с тем, насколько высоко в дереве поиска можно подняться из их поддеревьев.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Связный граф — граф, в котором между любыми двумя вершинами существует путь. Связность нужна, чтобы осмысленно искать элементы, разрыв которых разделит единую сеть на части. Если граф изначально состоит из нескольких частей, анализ проводят отдельно для каждой компоненты.
Компонента связности — максимальная связная часть графа, то есть набор вершин, внутри которого между любыми двумя есть путь. При удалении моста число компонент увеличивается на единицу, а при удалении точки сочленения может увеличиться на несколько единиц. Сравнение этого числа до и после удаления даёт точное определение уязвимости.
Мост — ребро, удаление которого увеличивает число компонент связности графа. Такое ребро является единственным соединением между некоторыми частями сети. В обозначении ребра u–v его проверяют не по степеням концов, а по наличию обходного пути между u и v.
Точка сочленения — вершина, удаление которой вместе со всеми инцидентными рёбрами увеличивает число компонент связности. Она может соединять несколько самостоятельных частей графа. Если после удаления вершины остальные вершины по-прежнему образуют столько же компонент, точкой сочленения она не является.
Удаление моста разрывает граф, потому что между его концами нет другого пути. Все маршруты из одной стороны в другую обязательно проходят по этому ребру, поэтому после его удаления вершины оказываются в разных компонентах. Немостовое ребро имеет обходной путь, и по нему можно сохранить связь после удаления исходного ребра.
Ребро является мостом тогда и только тогда, когда оно не входит ни в один цикл. Если ребро принадлежит циклу, остальные рёбра цикла образуют путь между его концами, значит, удаление не нарушает связность. И наоборот, если между концами ребра есть другой путь, вместе с самим ребром он образует цикл, поэтому такое ребро мостом быть не может.
Точку сочленения определяют результатом удаления вершины и всех её рёбер. Она должна связывать как минимум две независимые части графа, между которыми нет обходного пути без этой вершины. Если все направления из вершины ведут в одну и ту же связную часть через альтернативные маршруты, её удаление граф не разделит.
Последствия удаления ребра и вершины различаются. Мост разрывает конкретную связь между частями, но его концы остаются в графе. Точка сочленения исчезает вместе со всеми инцидентными рёбрами и может отделить целую группу вершин, поэтому её влияние иногда значительно шире.
Поиск в глубину строит дерево посещения и нумерует вершины временем входа tin. Для поддерева вершины u вычисляют low[u] — самое раннее время, до которого можно добраться из этого поддерева по рёбрам дерева и обратным рёбрам. Для ребра родитель–потомок (u, v) условие low[v] > tin[u] означает мост, а low[v] ≥ tin[u] — признак точки сочленения u; для корня действует отдельное условие по числу детей.
| Свойство | Мост | Точка сочленения |
|---|---|---|
| Что является объектом | Ребро | Вершина |
| Условие уязвимости | Удаление увеличивает число компонент связности | Удаление вместе с инцидентными рёбрами увеличивает число компонент связности |
| Связь с циклами | Мост не принадлежит ни одному циклу | Вершина может принадлежать циклам и при этом быть точкой сочленения |
| Что нарушается при удалении | Связь между частями графа | Связность одной или нескольких частей графа |
| Основная область применения | Поиск критических каналов или дорог | Поиск критических узлов или пунктов сети |
Сначала определите, что именно удаляется: ребро или вершина. Затем сравните число компонент до и после удаления, а для больших графов используйте критерии обхода в глубину. Строка о циклах помогает быстро находить мосты, но для точек сочленения одного этого признака недостаточно.
Дан граф с рёбрами AB, BC, CA и CD. Нужно найти все мосты и точки сочленения. Первые три ребра образуют треугольник, а вершина D присоединена к нему единственным ребром CD.
Ответ: мост — CD; точка сочленения — C. Треугольник защищён от разрыва альтернативными маршрутами, а ребро CD является единственным каналом к D.
Дан граф с рёбрами AB, BC, CA, CD, DE, EF и FD. Нужно определить, какие элементы можно удалить без увеличения числа компонент связности. Граф состоит из двух треугольников ABC и D EF, соединённых ребром CD.
Ответ: без увеличения числа компонент можно удалить рёбра AB, BC, CA, DE, EF, FD и вершины A, B, E, F. Мост — CD, точки сочленения — C и D.
Для графа, заданного списками смежности, требуется найти все мосты и точки сочленения одним обходом в глубину. Такой способ не перебирает каждое удаление отдельно, а использует структуру дерева поиска.
Ответ: один DFS находит все нужные элементы за время порядка числа вершин и рёбер, O(V + E). Ключевая идея — выяснить, может ли поддерево вернуться к предку без ребра или вершины своего соединения.
Ошибка: считать мостом любое ребро, соединяющее вершины разной степени. Степень показывает число соседей, но не наличие обходного пути. Проверяйте, увеличится ли число компонент после удаления, или ищите цикл.
Ошибка: искать только другое прямое ребро между концами. Обходной путь может состоять из нескольких рёбер и проходить через множество вершин. Нужно проверять любой путь, а не только параллельное ребро.
Ошибка: удалять только саму вершину, оставляя её рёбра. По определению вместе с вершиной исчезают все инцидентные рёбра. Поэтому мысленно уберите вершину и пересчитайте компоненты оставшегося графа.
Ошибка: применять к корню DFS критерий обычной вершины. У корня нет родительского ребра, поэтому сравнение с ним устроено иначе. Корень является точкой сочленения только при двух и более дочерних поддеревьях.
Для темы нужны понятия графа, вершины, ребра, пути, циклы, связность и компоненты связности. Без них трудно точно описать, что именно меняется после удаления элемента.
Мосты и точки сочленения тесно связаны с обходами в ширину и глубину. Особенно удобен DFS, а списки смежности позволяют просматривать рёбра без построения матрицы большого размера.
На практике эти понятия применяют для анализа транспортных, компьютерных и коммуникационных сетей. Они помогают находить критические дороги, каналы, узлы и пункты, отказ которых нарушит работу системы.
Может ли мост входить в цикл?
Нет. Если ребро входит в цикл, между его концами существует обходной путь по остальным рёбрам цикла. Поэтому его удаление не увеличит число компонент связности.
Может ли вершина быть точкой сочленения, если все её рёбра входят в циклы?
Да, может. Например, два цикла могут иметь только одну общую вершину: все рёбра входят в циклы, но удаление общей вершины разъединит эти части графа.
Почему удаление листа обычно не делает его точкой сочленения?
У листа только одно инцидентное ребро, поэтому после его удаления исчезает лишь сам лист, а остальные вершины сохраняют связность. Число компонент связности связного графа обычно не увеличивается.
Как определить мост и точку сочленения без полного перебора всех удалений?
Можно выполнить один поиск в глубину и для каждой вершины вычислить время входа и минимальное время, достижимое из её поддерева. Для ребра (u, v) условие моста: low[v] > tin[u], а для некорневой вершины условие точки сочленения: low[v] ≥ tin[u].
Чем отличаются критерии для корня и остальных вершин дерева поиска в глубину?
Корень является точкой сочленения, если у него больше одного дочернего поддерева. Для остальных вершин достаточно существования дочернего поддерева v, для которого low[v] ≥ tin[u].
§ 54. Мосты и точки сочленения