๐Ÿ—๏ธ Algorithm/๐ŸŸฉ ๋ฐฑ์ค€

๐ŸŸฉ [๋ฐฑ์ค€] [Python] [Class3] 11724๋ฒˆ_์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜

Dbswnstjd 2022. 11. 7. 01:08

๋ฌธ์ œ

https://www.acmicpc.net/problem/11724

 

11724๋ฒˆ: ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ N๊ณผ ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์— ๊ฐ„์„ ์˜ ์–‘ ๋์  u์™€ v๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ u, v ≤ N, u ≠ v) ๊ฐ™์€ ๊ฐ„์„ ์€ ํ•œ ๋ฒˆ๋งŒ ์ฃผ

www.acmicpc.net

ํ’€์ด

DFS๋ฅผ ์ด์šฉํ•œ ํ’€์ด

# ๋ฐฑ์ค€ 11724๋ฒˆ ๋ฌธ์ œ - ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜ 
import sys
sys.setrecursionlimit(10**7)
input = sys.stdin.readline

n, m = map(int, input().split())

graph = [[] for _ in range(n+1)]
visited = [False] * (n+1)

for _ in range(m):
    x, y = map(int, input().split())
    graph[x].append(y)
    graph[y].append(x)

def dfs(v):
    visited[v] = True
    for i in graph[v]:
        if visited[i] == False:
            visited[i] = True
            dfs(i)
            
count = 0
for i in range(1, n+1):
    if visited[i] == False:
        count+=1
        dfs(i)

print(count)

 

BFS๋ฅผ ์ด์šฉํ•œ ํ’€์ด

# BFS
import sys
from collections import deque

input = sys.stdin.readline


def bfs(start):
    queue = deque([start])
    visited[start] = True
    while queue:
        node = queue.popleft()
        for i in graph[node]:
            if not visited[i]:
                visited[i] = True
                queue.append(i)


N, M = map(int, input().split())
graph = [[] for _ in range(N + 1)]

for _ in range(M):
    a, b = map(int, input().split())
    graph[a].append(b)
    graph[b].append(a)

# ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
visited = [False] * (1 + N)
count = 0  # ์ปดํฌ๋„ŒํŠธ ๊ทธ๋ž˜ํ”„ ๊ฐœ์ˆ˜ ์ €์žฅ

# 1~N๋ฒˆ ๋…ธ๋“œ๋ฅผ ๊ฐ๊ฐ๋Œ๋ฉด์„œ
for i in range(1, N + 1):
    if not visited[i]:  # ๋งŒ์•ฝ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด
        if not graph[i]:  # ๋งŒ์•ฝ ๊ทธ๋ž˜ํ”„๊ฐ€ ๋น„์–ด์žˆ๋‹ค๋ฉด
            count += 1  # ๊ฐœ์ˆ˜ 1๊ฐœ ์ถ”๊ฐ€
            visited[i] = True  # ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
        else:  # ๋งŒ์•ฝ ๊ทธ๋ž˜ํ”„๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด(์–ด๋Š ์ ๊ณผ ์—ฐ๊ฒฐ๋œ ์ ์ด ์žˆ๋‹ค๋ฉด)
            bfs(i)  # ํ•ด๋‹น i๋ฅผ ์‹œ์ž‘๋…ธ๋“œ๋กœ bfs๋ฅผ ๋ˆ๋‹ค.
            count += 1  # ์—ฐ๊ฒฐ์š”์†Œ ๋ฅผ +1๊ฐœ ํ•ด์ค€๋‹ค.

print(count)