728x90
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
๋ ๋ค ํด๋ณด๋ bfs๊ฐ ์ข ๋ ๋นจ๋๋ค
1. ๋ฐฑ์ค์์๋ dfsํ๋ฉด ์๊พธ RecursionError๊ฐ ๋๋ค
-์ต๋ ์ฌ๊ท ๊น์ด ์ค์ ๊ฐ์ ๋ฐ๊ฟ์ฃผ๋ฉด ๋๊ธด ํ๋๋ฐ ์ด๊ฒ ๋งค๋ฒ ํด์ฃผ๊ธฐ ์ข ๊ท์ฐฎ๋ค
2. ๊ทธ๋ํ ์์ ์ ๋ ฅ๋ฐ์ ๋ input()์ผ๋ก ๋ฐ์ผ๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ค.
-sys.stdin.readline()์ผ๋ก ๋ฐ์ผ๋ฉด ํด๊ฒฐ๋จ
from collections import deque
import sys
sys.setrecursionlimit(10**6)
def dfs(x):
if visited[x]==1:
return False
visited[x]=1 #๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
#์ฐ๊ฒฐ๋ ๋ฐฉ๋ฌธ ๊ฐ๋ฅํ ์์๋ค์ ์์์ ์ผ๋ก dfs ํ true๋ฅผ ๋ฆฌํด
for i in graph[x]:
if visited[i]==0:
dfs(i)
return True
def bfs(x):
if visited[x]==1:
return False
visited[x]=1 #๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
q = deque()
q.append(x)
while q:
cur = q.popleft()
for i in range(len(graph[cur])):
next = graph[cur][i]
if visited[next]==0:
visited[next]=1 #๋ฐฉ๋ฌธ์ฒ๋ฆฌ
q.append(next)
return True
#๊ทธ๋ํ ์ ๋ณด ์
๋ ฅ๋ฐ๊ธฐ
n,m = map(int,sys.stdin.readline().split())
graph=[[] for _ in range(n+1)]
for i in range(m):
a,b=map(int,sys.stdin.readline().split())
graph[a].append(b)
graph[b].append(a)
visited = [0]*(n+1)
#์ฐ๊ฒฐ์์ ๊ฐ์ ์นด์ดํธํ๊ธฐ
cnt=0
for i in range(1,n+1):
if dfs(i)==True:
cnt += 1
print(cnt)
728x90
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด > DFS,BFS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค]7569๋ฒ: ํ ๋งํ (0) | 2023.02.28 |
---|---|
[๋ฐฑ์ค]9205๋ฒ: ๋งฅ์ฃผ ๋ง์๋ฉด์ ๊ฑธ์ด๊ฐ๊ธฐ (0) | 2023.02.27 |
[๋ฐฑ์ค]7576๋ฒ: ํ ๋งํ (0) | 2023.02.25 |
[๋ฐฑ์ค]2468๋ฒ: ์์ ์์ญ (0) | 2023.02.25 |
[๋ฐฑ์ค]10026๋ฒ: ์ ๋ก์์ฝ (0) | 2023.02.24 |