https://www.acmicpc.net/problem/11724
문제
방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어진다.
출력
첫째 줄에 연결 요소의 개수를 출력한다.
Union Find
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
count = N
status = [i for i in range(N+1)]
for _ in range(M):
u, v = map(int, input().split())
if status[u] != status[v]:
if status[u] < status[v]:
before = status[v]
after = status[u]
else:
before = status[u]
after = status[v]
for i in range(1, N+1):
if status[i] == before:
status[i] = after
elif status[i] > before:
status[i] -= 1
count -= 1
print(count)
BFS
import sys
input = sys.stdin.readline
from collections import deque
N, M = map(int, input().split())
graph = [[] for _ in range(N+1)]
visited = [False for _ in range(N+1)]
for _ in range(M):
u, v = map(int, input().split())
graph[u].append(v)
graph[v].append(u)
def bfs(start):
queue = deque([start])
visited[start] = True
while queue:
p = queue.popleft()
for node in graph[p]:
if not visited[node]:
visited[node] = True
queue.append(node)
count = 0
for i in range(1, N+1):
if not visited[i]:
bfs(i)
count += 1
print(count)
'Coding Test > 백준' 카테고리의 다른 글
[백준] / [Python] / [19637] IF문 좀 대신 써줘 (0) | 2024.06.04 |
---|---|
[백준] / [Python] / [1260] DFS와 BFS (0) | 2024.06.03 |
[백준] / [Python] / [3085] 사탕 게임 (0) | 2024.06.03 |
[백준] / [Python] / [20365] 블로그2 (0) | 2024.05.31 |
[백준] / [Python] / [3986] 좋은 단어 (0) | 2024.05.31 |