728x90
๐ ๋ฐฑ์ค 11724 - ์ฐ๊ฒฐ ์์์ ๊ฐ์
๐ก ๋์ ํ์ด
์ด๋ฒ ๋ฌธ์ ๋ BFS์ DFS ๋ชจ๋ ์ด์ฉํด์ ํ์๋๋ฐ ์๊ฐ ์ฐจ์ด๊ฐ ๋ง์ด ๋์ง ์์๋ค.(๊ทผ์ํ๊ฒ DFS
๊ฐ 48m/s
์ ๋ ๋นจ๋๋ค.) ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ๊ฐ ์์ ๋๋ ์
๋ ฅ๊ฐ์ ๋ฐ๋๋ก ๋ฐ๊ฟ์ ๋ฃ์ด์ค๋ ๋๋ค.
728x90
์์ ์ ๋ ฅ1์ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ค. graph์ index๊ฐ ๋ ธ๋์ด๋ค. DFS๋ก ํ ๋๋ ์ต๋ ์ฌ๊ท ๊ฐ์ ๋ ์ด์ด์ค์ผ ํ๋ฆฐ๋ค.
import sys
sys.setrecursionlimit(1000000)
input = sys.stdin.readline
def dfs(graph, v, visited): # dfs implementation
visited[v] = True
for i in graph[v]:
if not visited[i]:
dfs(graph, i, visited)
N, M = map(int, input().split())
graph = [[] for _ in range(N + 1)]
visited = [False] * (N + 1)
for i in range(M):
node1, node2 = map(int, input().split())
graph[node1].append(node2)
graph[node2].append(node1)
cnt = 0
for i in range(1, N+1): # check each node
if not visited[i]:
dfs(graph, i, visited)
cnt += 1
print(cnt)
๋ฐ์ํ
'Algorithm > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 1926 - ๊ทธ๋ฆผ(BFS) (0) | 2021.04.20 |
---|---|
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 2606 - ๋ฐ์ด๋ฌ์ค(DFS) (0) | 2021.04.19 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 11724 - ์ฐ๊ฒฐ ์์์ ๊ฐ์(BFS) (0) | 2021.04.19 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 2468 - ์์ ์์ญ (0) | 2021.04.19 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 2331 - ๋ฐ๋ณต์์ด (0) | 2021.04.17 |
๋๊ธ