๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด/DFS,BFS

[๋ฐฑ์ค€]11724๋ฒˆ: ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜

by syLim___ 2023. 2. 26.
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