320x100
문제 : https://leetcode.com/problems/critical-connections-in-a-network/
tarjan 알고리즘으로 풀었다.
dfs로 정점들을 방문하면서 해당 정점을 방문한 순번(num)과 하나의 간선만으로 갈 수 있는 정점들 중 가장 작은 정점(low)을 저장하는 배열들을 저장한다.
low 저장하는 조건.
now = 현재 탐색중인 정점
next = now에서 방문할 다음 정점
1. next 정점을 이미 방문한 경우(back edge) : low[now] = min(low[now], low[next])
2. next 정점을 아직 방문하지 않은 경우 : low[now] = min(low[now], num[next]).
2번인 경우 next 정점을 dfs로 방문하면서 low[next]를 세팅해준다.
low[next]를 세팅한 뒤, low[next] > num[now] 인경우 critical connections으로 보고 정답 배열에 추가한다.
시간복잡도는 O(V+E).
320x100
'알고리즘 문제 > Leetcode' 카테고리의 다른 글
[leetcode][1189] Maximum Number of Balloons (0) | 2019.09.25 |
---|---|
[leetcode][1202] Smallest String With Swaps (0) | 2019.09.23 |
[leetcode][1200] Minimum Absolute Difference (0) | 2019.09.22 |
[leetcode] 1191. K-Concatenation Maximum Sum (0) | 2019.09.16 |
[leetcode] 1048. Longest String Chain (0) | 2019.09.11 |
댓글