Мосты и точки сочленения
Рёбра, чьё удаление рвёт граф: low[w] > tin[v].
1function findBridges(edges: Array<[a: string, b: string]>) {2 const graph = buildAdj(edges)3 const tin = new Map<string, number>()4 const low = new Map<string, number>()5 const bridges: Array<[string, string]> = []6 let timer = 07 8 function dfs(v: string, parent: string | null): void {9 tin.set(v, low.set(v, ++timer).get(v)!)10 for (const w of graph.get(v) ?? []) {11 if (w === parent) continue12 if (tin.has(w)) {13 low.set(v, Math.min(low.get(v)!, tin.get(w)!)) // обратное ребро14 } else {15 dfs(w, v)16 low.set(v, Math.min(low.get(v)!, low.get(w)!))17 if (low.get(w)! > tin.get(v)!) {18 bridges.push([v, w]) // мост: не вернуться выше v19 }20 }21 }22 }23 24 dfs(start, null)25 return bridges26}Проблема
Рёбра, чьё удаление рвёт граф: low[w] > tin[v].
Что вы видите
tin/low как у Тарьяна; мост — если из поддерева не вернуться выше.
Как это работает
Один DFS находит все мосты и точки сочленения. Карта уязвимости сети: single points of failure.
Пошаговый разбор
- 01
tin
Время входа.
- 02
low
Насколько высоко вернуться.
- 03
Мост
low[w] > tin[v].
Complexity и ограничения
Сложность см. в шапке страницы.
Edge cases
- Пустой вход
Корректная тривиальная обработка.
- Вырожденный случай
Минимум работы — сразу ответ.
Где встречается в реальности
Сети
Single points of failure.
Микросервисы
Критические связи.
Транспорт
Мосты буквально.
Связанные алгоритмы
«Какое ребро рвёт сеть»
Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.
Shorts 9:16
Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.