정의
무방향 연결 그래프에서
- 단절점(cut vertex, articulation point): 그 정점과 거기 붙은 간선을
제거하면 그래프가 둘 이상으로 쪼개지는 정점. - 단절선(bridge): 제거하면 그래프가 쪼개지는 간선.
이들은 네트워크의 취약점을 뜻한다. "고장 나면 통신이 끊기는 라우터/회선"이
바로 단절점/단절선이다.
DFS 트리와 low 값
무방향 그래프를 DFS하면 트리 간선과 역방향 간선만 생긴다(교차 간선이
없음). 각 정점에 방문 순서 disc를 매기고, "그 서브트리에서 역방향 간선을 타고
도달할 수 있는 가장 이른(작은 disc) 정점"을 low로 정의한다.
$$ low[u] = \min\Big( disc[u],\ \min_{u\to v \text{ 백간선}} disc[v],\ \min_{u\to c \text{ 트리간선}} low[c] \Big) $$
low는 "이 서브트리가 자기 위쪽 조상으로 몰래 올라갈 수 있는 최선의 높이"를
나타낸다.
단절선 판정
트리 간선 \(u \to v\)(\(v\)는 자식)에 대해
$$ low[v] > disc[u] $$
이면 간선 \((u, v)\)는 단절선이다. 자식 서브트리가 \(u\)를 거치지 않고는
\(u\) 위로 올라갈 길이 전혀 없다는 뜻이기 때문이다. 단, 다중 간선이 있으면
부모로의 역방향을 한 번만 무시하도록 주의해야 한다.
단절점 판정
두 경우로 나뉜다.
- 루트가 아닌 정점 \(u\): 어떤 자식 \(v\)에 대해 \(low[v] \ge disc[u]\)이면 \(u\)는
단절점. (자식이 \(u\)를 통하지 않고는 위로 못 올라감 → \(u\)를 빼면 자식
서브트리가 분리됨.) - DFS 트리의 루트: 자식이 2개 이상이면 단절점.
단절선은 부등호가 >(같으면 안 됨)인 반면 단절점은 >=(같아도 됨)라는 점이
가장 헷갈리는 부분이니 정확히 구분하자.
이중 연결 요소
단절점으로 나뉘지 않는 극대 부분을 이중 연결 요소(BCC) 라 한다. 정확히는
간선 기준으로 묶으며, 단절선 하나로만 이어진 두 덩어리는 서로 다른 BCC다.
모든 BCC를 한 정점으로 줄이면 블록-컷 트리가 되어, 정점 사이의 "반드시
거쳐야 하는 단절점" 구조를 트리로 다룰 수 있다.
복잡도
DFS 한 번으로 모든 disc, low를 계산하므로 \(O(V + E)\)다.