๐ฅ Silver1
https://www.acmicpc.net/problem/21937
โ ์ ๋ต์ฝ๋
import sys
input = sys.stdin.readline
def dfs(idx):
stack.append(idx)
visited[idx] = True
while stack:
cur = stack.pop()
for i in graph[cur]:
if not visited[i]:
stack.append(i)
visited[i] = True
answer.add(i)
n, m = map(int, input().strip().split())
graph = [[] for _ in range(n + 1)]
visited = [False] * (n + 1)
for _ in range(m):
start, end = map(int, input().strip().split())
graph[end].append(start)
target = int(input().strip())
stack = []
answer = set()
dfs(target) # ๋ค์์๋ถํฐ ์ญ์ถ์
print(len(answer))
์ด๊ฒ๋ ๋ค๋ฅธ ๊ทธ๋ํ ์ํ ๋ฌธ์ ์ฒ๋ผ, ๊ทธ๋ํ์์ ์ด๋ํ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์ผ๋ฉด ๋๋ ๋ฌธ์ ์ธ๋ฐ
์๊ฐํด๋ณด๋ ์ด ๋ฌธ์ ๋ ์ต์ข ์ ์ผ๋ก ํด์ผํ ์์ ์ ๋ฒํธ๋ง ์์ง ์ถ๋ฐ์ ์ ๋ชจ๋ฅด๋ ์ํ์ด๋ค.
์ผ๋จ ๋ฌด์์ graph๋ฅผ ๊ทธ๋ฆฌ๊ณ ์จ๋ณด๋, ์ต์ข ๋ชฉํ ์์ ๋ฒํธ๋ฅผ ์ฐพ๊ณ , ๊ทธ ์ธ๋ฑ์ค ๋ฒํธ๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ธ๋ฑ์ค๋ฅผ ๋ ์ฐพ๊ณ ์ด๋ฐ์์ผ๋ก ๋์ํด๋๊ฐ์ผ ๋๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ์ฆ, ๋ค์์๋ถํฐ ์ญ์ถ์ ๋ฐฉ์์ ์ฌ์ฉํด์ผํ๋ค.
์ฒ์์ ์ index๋ฅผ ์๊ฐํ๋ ๋จธ๋ฆฌ๊ฐ ์ํ ์ง๋ง, ์ด๋ ต๊ฒ ์๊ฐํ ๊ฒ ์์ด ๊ทธ๋ํ๋ฅผ ๋ค์์๋ถํฐ ์ํํ๋ฉด์ ์ธ์ ๋ฆฌ์คํธ๋ค์ ํ์ธํ๊ณ ๋ฐฉ๋ฌธํ๋ ํ์ฌ ๋ ธ๋๋ฅผ ์ค๋ณต๋ฐฉ์ง๋ฅผ ์ํ answer๋ผ๋ set์ ๋ฃ์ด์ฃผ๊ณ ์ต์ข ์ ์ผ๋ก answer ๊ฐ์๋ฅผ ๋ฆฌํดํ๋ค.
โ๏ธ์ค๋ต์ ์์ธ์ด์๋, graph๋ฅผ ์์ฑํ ๋ ์ญ์ถ์ ์ผ๋ก ๋ฐฉํฅ์ด ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์, ์ธ์ ๋ฆฌ์คํธ ๋ํ ๋ฌ๋ผ์ง๋ค.