[BOJ 6672] Electricity
문제
https://www.acmicpc.net/problem/6672
풀이
BCC를 구현하고 푼 첫 문제이다.
추가로 각 노드 별로 속해있는 BCC의 개수를 구해, 그중 제일 큰 값을 가지는 노드를 제거하면 정답이 된다.
코드
import sys
sys.setrecursionlimit(10 ** 4)
def dfs(cur, parent):
global idx
dfsn[cur] = idx
low = idx
idx += 1
for nxt in graph[cur]:
if nxt == parent:
continue
if not dfsn[nxt]:
stack.append((cur, nxt))
child = dfs(nxt, cur)
low = min(low, child)
if dfsn[cur] <= child:
adj[cur] += 1
res = []
while stack[-1] != (cur, nxt):
res.append(stack.pop())
res.append(stack.pop())
bcc.append(res)
elif low > dfsn[nxt]:
low = min(low, dfsn[nxt])
stack.append((cur, nxt))
return low
while True:
n, m = map(int, sys.stdin.readline().split())
if (n, m) == (0, 0):
break
graph = [[] for _ in range(n)]
for _ in range(m):
a, b = map(int, sys.stdin.readline().split())
graph[a].append(b)
graph[b].append(a)
bcc = []
stack = []
dfsn = [0] * n
adj = [1] * n
idx = 1
ans = 0
for i in range(n):
if not dfsn[i]:
dfs(i, -1)
adj[i] -= 1
ans += 1
print(ans + max(adj) - 1)
Leave a comment