๋ฌธ์
https://www.acmicpc.net/problem/11724
ํ์ด
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)
'๐๏ธ Algorithm > ๐ฉ ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ฉ [๋ฐฑ์ค] [Python] [Class3] 1074๋ฒ_Z (0) | 2022.11.07 |
---|---|
๐ฉ [๋ฐฑ์ค] [Python] [Class3] 18870๋ฒ_์ขํ ์์ถ (0) | 2022.11.07 |
๐ฉ [๋ฐฑ์ค] [Python] [Class3] 1927๋ฒ_์ต๋ ํ (0) | 2022.11.07 |
๐ฉ [๋ฐฑ์ค] [Python] [๊ตฌํ] 2167๋ฒ_2์ฐจ์ ๋ฐฐ์ด์ ํฉ (0) | 2022.11.06 |
๐ฉ [๋ฐฑ์ค] [Python] [๊ตฌํ] 17478๋ฒ_์ฌ๊ทํจ์๊ฐ ๋ญ๊ฐ์? (0) | 2022.11.06 |