์ฝ”ํ…Œ์ค€๋น„

<dfs/bfs> ๋ฐฑ์ค€ 11724๋ฒˆ. ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜

์š”๋Œœ๋‹ค 2022. 9. 30. 20:53

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

์‹œํ—˜๊ณต๋ถ€ํ•  ๋• ๊ณต๋ถ€๋นผ๊ณค ๋‹ค ์žฌ๋ฐŒ๋Š”๊ฒŒ ์‚ฌ์ด์–ธ์Šค. . .

import sys
from collections import deque

input=sys.stdin.readline

n, m = map(int, input().split())
graph = [[]*(n+1) for i in range(n+1)];
visited = [False]*(n+1) #์—ฐ๊ฒฐ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๊ธฐ ์œ„ํ•œ visited
cnt = 0 #์—ฐ๊ฒฐ ๊ฐœ์ˆ˜

for _ in range(m):
  a, b = map(int, input().split())
  graph[a].append(b);
  graph[b].append(a);

def bfs(n, visited):
  q = deque()
  q.append(n)
  while q:
    nn = q.popleft()
    visited[nn] = True
    for i in graph[nn]:    
      if (visited[i] == False) : #๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋ผ๋ฉด
        visited[i] = True #๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์คŒ
        q.append(i)                  #ํ์— ๋„ฃ์–ด์ค€๋‹ค

for i in range(1, len(graph)):
  if (visited[i] == False): #๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋ผ๋ฉด
    cnt += 1
    bfs(i,visited)


print (cnt)

bfs๋กœ ํ’€์–ด์ฃผ์—ˆ๋‹ค. ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์„œ sys.stdin.realine์„ ์ถ”๊ฐ€ํ•ด์คฌ๋”๋‹ˆ ํ†ต๊ณผํ•˜์˜€๋‹ค.

1๋ฒˆ๋ถ€ํ„ฐ n๋ฒˆ ๋…ธ๋“œ๊นŒ์ง€ bfs๋กœ ํƒ์ƒ‰ํ•˜์ฃผ๋Š”๋ฐ, ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋Š” ์ œ์™ธํ•˜๊ณ  ์ด ๋ช‡ ๋ฒˆ์ด ์‹คํ–‰๋๋Š”์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

ํฌ๊ฒŒ ์–ด๋ ค์šด ๋ฌธ์ œ๋Š” ์•„๋‹ˆ์˜€๋‹ค.