์ฐ๊ฒฐ ์์์ ๊ฐ์
๋ฌธ์
๋ฐฉํฅ ์๋ ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ก์ ๋, ์ฐ๊ฒฐ ์์ (Connected Component)์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ ์ ๊ฐ์ N๊ณผ ๊ฐ์ ์ ๊ฐ์ M์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) ๋์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์ ๊ฐ์ ์ ์ ๋์ u์ v๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ u, v ≤ N, u ≠ v) ๊ฐ์ ๊ฐ์ ์ ํ ๋ฒ๋ง ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ฐ๊ฒฐ ์์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
6 5
1 2
2 5
5 1
3 4
4 6
์์ ์ถ๋ ฅ 1
2
https://www.acmicpc.net/problem/11724
import sys
sys.setrecursionlimit(10 ** 6) # python ์ฌ๊ท ์ ํ
read = sys.stdin.readline
n, m = map(int, read().split())
graph = [[0 for i in range(n + 1)] for j in range(n + 1)]
for i in range(m):
a, b = map(int, read().split())
graph[a][b] = 1
graph[b][a] = 1
visited = [0] * (n + 1)
count = 0
def dfs(v, visited):
visited[v] = 1
for i in range(n + 1):
if visited[i] == 0 and graph[v][i] == 1:
dfs(i, visited)
for i in range(1, n + 1):
if visited[i] == 0:
dfs(i, visited)
count += 1
print(count)
์ฌ๊ท ์ ํ ๊ฑธ๋ฆฌ์ง์๊ฒ setrecursionlimit ํด์ฃผ๊ธฐ
728x90
'Algorithms > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
1๋ก๋ง๋ค๊ธฐ (๋ฐฑ์ค1463) (0) | 2021.10.13 |
---|---|
์์ด ์ฌ์ดํด (๋ฐฑ์ค 10451) (0) | 2021.10.12 |
์ด๋ถ ๊ทธ๋ํ (๋ฐฑ์ค 1707) (0) | 2021.10.08 |
[๋ฐ์ดํฐ ๊ตฌ์กฐ] ๋ฐฐ์ด(Array)์ ์ฐ๊ฒฐ๋ฆฌ์คํธ(Linked List)๋ก ๋ฆฌ์คํธ ์ถ์์๋ฃํ ๊ตฌํ (with C) (0) | 2021.04.16 |
[๊ทธ๋ํ] ์์ ์ ๋ ฌ (0) | 2021.04.14 |