โ๋ฌธ์
https://www.acmicpc.net/problem/24480
๋ฉ๋ชจ๋ฆฌ: 70312 KB, ์๊ฐ: 540 ms
๊น์ด ์ฐ์ ํ์, ๊ทธ๋ํ ์ด๋ก , ๊ทธ๋ํ ํ์, ์ ๋ ฌ
์ค๋๋ ์์ค์ด๋ ๊น์ด ์ฐ์ ํ์(DFS) ์์ ์กฐ๊ต๋ฅผ ํ๊ณ ์๋ค. ์๋น ๊ฐ ์์ ํ ๋ด์ฉ์ ํ์๋ค์ด ์ ์ดํดํ๋์ง ๋ฌธ์ ๋ฅผ ํตํด์ ํ์ธํด๋ณด์.
N๊ฐ์ ์ ์ ๊ณผ M๊ฐ์ ๊ฐ์ ์ผ๋ก ๊ตฌ์ฑ๋ ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ(undirected graph)๊ฐ ์ฃผ์ด์ง๋ค. ์ ์ ๋ฒํธ๋ 1๋ฒ๋ถํฐ N๋ฒ์ด๊ณ ๋ชจ๋ ๊ฐ์ ์ ๊ฐ์ค์น๋ 1์ด๋ค. ์ ์ R์์ ์์ํ์ฌ ๊น์ด ์ฐ์ ํ์์ผ๋ก ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ๊ฒฝ์ฐ ๋ ธ๋์ ๋ฐฉ๋ฌธ ์์๋ฅผ ์ถ๋ ฅํ์.
๊น์ด ์ฐ์ ํ์ ์์ฌ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค. ์ธ์ ์ ์ ์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ๋ฐฉ๋ฌธํ๋ค.
dfs(V, E, R) { # V : ์ ์ ์งํฉ, E : ๊ฐ์ ์งํฉ, R : ์์ ์ ์
visited[R] <- YES; # ์์ ์ ์ R์ ๋ฐฉ๋ฌธ ํ๋ค๊ณ ํ์ํ๋ค.
for each x ∈ E(R) # E(R) : ์ ์ R์ ์ธ์ ์ ์ ์งํฉ.(์ ์ ๋ฒํธ๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ๋ฐฉ๋ฌธํ๋ค)
if (visited[x] = NO) then dfs(V, E, x);
}
โ๐ปํ์ด
๋ฌด๋ฐฉํฅ ๊ทธ๋ํ๋ผ๊ณ ํ์์ผ๋ฏ๋ก U์ V์ ์ธ์ ๋ฆฌ์คํธ์ ๊ฐ ์ ์ ์ ๋ฃ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ด๋ฆผ์ฐจ์์ผ๋ก ๋ฐฉ๋ฌธํ๋ค๊ณ ํ์์ผ๋ฏ๋ก ๊ฐ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค.
๊ฐ ์ ์ ์ด ๋ช ๋ฒ์งธ๋ก ๋ฐฉ๋ฌธํ ์ ์ ์ธ์ง ์ถ๋ ฅํด์ผ ํ๋ฏ๋ก cnt๋ฅผ 1์ฉ ์ฆ๊ฐํ๋ฉฐ visited์ ์ ์ฅํ๋ค. ๋ชจ๋ ์ ์ ์ ๋ฐฉ๋ฌธ์ ๋ง์น๊ณ ๋ฐฉ๋ฌธํ ์ ์ ์ visited์ ์ ์ฅ๋ ๊ฐ์ ์ถ๋ ฅํ๊ณ , ์์ ์ ์ ์์ ๋ฐฉ๋ฌธํ์ง ๋ชปํ ๊ณณ์ด๋ผ๋ฉด 0์ ์ถ๋ ฅํ๋ค.
๐ป์ฝ๋
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6) # recursion limit ๋๋ฆฌ๊ธฐ
N, M, R = map(int, input().split())
graph = [[] for _ in range(N+1)]
for _ in range(M):
U, V = map(int, input().split())
graph[U].append(V)
graph[V].append(U)
for i in range(1, N+1):
graph[i].sort(reverse=True)
visited = [False] * (N+1)
cnt = 1
def dfs(u):
global cnt
visited[u] = cnt
cnt += 1
for v in graph[u]:
if not visited[v]:
dfs(v)
dfs(R)
for i in range(1, N+1):
if not visited[i]:
print(0)
else:
print(visited[i])
๐ํ๊ธฐ
PyPy3๋ก ํ๋ฉด ๋ณดํต ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ง์ด ์กํ๋๋ฐ ๊ทธ๋์ ๊ทธ๋ฐ์ง ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋์ค๊ณ Python3๋ก ํ๋๊น ๋ง์๋ค๊ณ ํ๋ค...
PyPy3๋ก ์ฐ๋ ๊ณณ ์๊ทผ ์๋๋ฐ ๋ฉ๋ชจ๋ฆฌ๋ ์ด์ฌํ ๊ณ์ฐํด์ผ ํ ๋ฏ..๐ฅฒ
๊ทธ๋ฆฌ๊ณ ๋ฌธ์ ์์ฒด๊ฐ recursion์ ์จ์ผํ๋ ๊ฒ ๊ฐ์๋ฐ recursion error๋๋ ๊ฒ๋ ์ด์ด๊ฐ ์ข ์๋ค..
'Coding Test > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ํฐ ์ ๋ง๋ค๊ธฐ/Python - Lv.2 (0) | 2025.01.27 |
---|---|
[๋ฐฑ์ค] 1753. ์ต๋จ๊ฒฝ๋ก/Python - ๊ณจ๋4 (0) | 2025.01.20 |
[๋ฐฑ์ค] 1449. ์๋ฆฌ๊ณต ํญ์น (0) | 2024.12.21 |
[๋ฐฑ์ค] 11399. ATM/Python - Silver4 (2) | 2024.12.20 |
[๋ฐฑ์ค] 1010.๋ค๋ฆฌ ๋๊ธฐ/Python - Silver5 (1) | 2024.12.06 |