https://www.acmicpc.net/problem/11724

****

๐Ÿ’ก๋ฌธ์ œ ๋ถ„์„ ์š”์•ฝ

๋ฐฉํ–ฅ์—†๋Š” ๊ทธ๋ž˜ํ”„๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ผ

๐Ÿ’ก์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„

  1. ๊ทธ๋ž˜ํ”„๋ฅผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ์ €์žฅํ•œ๋‹ค.

  2. ๊ทธ๋ž˜ํ”„์— ์ €์žฅ๋œ ๋…ธ๋“œ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ฐฉ๋ฌธํ•œ๋‹ค.

2-1. ํ•˜๋‚˜์˜ ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค์„ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ์ €์žฅํ•˜์—ฌ, ํ•ด๋‹น ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค ์ค‘ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋ฅผ ์ฐจ๋ก€๋กœ ๋ฐฉ๋ฌธํ•œ๋‹ค.

2-2. dfs ํ•จ์ˆ˜๊ฐ€ ๋”์ด์ƒ ํ˜ธ์ถœ๋˜์ง€ ์•Š๊ณ  ๋๋‚˜๋ฉด ์—ฐ๊ฒฐ ์š”์†Œ๋ฅผ ๋ชจ๋‘ ์ฐพ์€ ๊ฒƒ์ด๋ฏ€๋กœ, ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๋๋‚˜ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ฒŒ ๋˜๋ฉด ์นด์šดํŠธ๋ฅผ ํ•˜๋‚˜ ๋”ํ•˜๊ณ  ์ƒˆ ์—ฐ๊ฒฐ ์š”์†Œ ๋ฐฉ๋ฌธ์„ ์‹œ์ž‘ํ•œ๋‹ค.

๐Ÿ’ก์ฝ”๋“œ

import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)

N, M = map(int, input().split())
visited=[False]*(N+1)
graph= [[] for i in range(N+1)]
count=0

for i in range(M):
    u, v = map(int, input().split())
    graph[u].append(v)
    graph[v].append(u)

def dfs(node):
    visited[node] = True
    for a in graph[node]:
        if not visited[a]:
            dfs(a)

for i in range(1, N+1):
    if not visited[i]:
        count+=1
        dfs(i)

print(count)

๐Ÿ’ก ๋Š๋‚€์  or ๊ธฐ์–ตํ•  ์ •๋ณด

๋Ÿฐํƒ€์ž„ ์—๋Ÿฌย (RecursionError)๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด sys.setrecursionlimit(10**6) ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

https://help.acmicpc.net/judge/rte/RecursionError