https://www.acmicpc.net/problem/15681
15681๋ฒ: ํธ๋ฆฌ์ ์ฟผ๋ฆฌ
ํธ๋ฆฌ์ ์ ์ ์ ์ N๊ณผ ๋ฃจํธ์ ๋ฒํธ R, ์ฟผ๋ฆฌ์ ์ Q๊ฐ ์ฃผ์ด์ง๋ค. (2 ≤ N ≤ 105, 1 ≤ R ≤ N, 1 ≤ Q ≤ 105) ์ด์ด N-1์ค์ ๊ฑธ์ณ, U V์ ํํ๋ก ํธ๋ฆฌ์ ์ํ ๊ฐ์ ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ U, V ≤ N, U ≠ V)
www.acmicpc.net
๋ฌธ์
๊ฐ์ ์ ๊ฐ์ค์น์ ๋ฐฉํฅ์ฑ์ด ์๋ ์์์ ๋ฃจํธ ์๋ ํธ๋ฆฌ๊ฐ ์ฃผ์ด์ก์ ๋, ์๋์ ์ฟผ๋ฆฌ์ ๋ตํด๋ณด๋๋ก ํ์.
- ์ ์ U๋ฅผ ๋ฃจํธ๋ก ํ๋ ์๋ธํธ๋ฆฌ์ ์ํ ์ ์ ์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
๋ง์ฝ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ์ ์ด๋ ค์์ด ์๋ค๋ฉด, ํ๋จ์ ํํธ์ ์ฒจ๋ถํ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์.
์ ๋ ฅ
ํธ๋ฆฌ์ ์ ์ ์ ์ N๊ณผ ๋ฃจํธ์ ๋ฒํธ R, ์ฟผ๋ฆฌ์ ์ Q๊ฐ ์ฃผ์ด์ง๋ค. (2 ≤ N ≤ 105, 1 ≤ R ≤ N, 1 ≤ Q ≤ 105)
์ด์ด N-1์ค์ ๊ฑธ์ณ, U V์ ํํ๋ก ํธ๋ฆฌ์ ์ํ ๊ฐ์ ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ U, V ≤ N, U ≠ V)
์ด๋ U์ V๋ฅผ ์ ๋์ ์ผ๋ก ํ๋ ๊ฐ์ ์ด ํธ๋ฆฌ์ ์ํจ์ ์๋ฏธํ๋ค.
์ด์ด Q์ค์ ๊ฑธ์ณ, ๋ฌธ์ ์ ์ค๋ช ํ U๊ฐ ํ๋์ฉ ์ฃผ์ด์ง๋ค. (1 ≤ U ≤ N)
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ํธ๋ฆฌ๋ ํญ์ ์ฌ๋ฐ๋ฅธ ํธ๋ฆฌ์์ด ๋ณด์ฅ๋๋ค.
์ถ๋ ฅ
Q์ค์ ๊ฑธ์ณ ๊ฐ ์ฟผ๋ฆฌ์ ๋ต์ ์ ์ ํ๋๋ก ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
import sys
sys.setrecursionlimit(100000)
n,r,q=map(int, sys.stdin.readline().split(' '))
graph=[[] for _ in range(n+1)]
for _ in range(n-1):
a,b=map(int, sys.stdin.readline().split(' '))
graph[a].append(b)
graph[b].append(a)
visited=[0]*(n+1)
def dfs(v):
visited[v]+=1
for node in graph[v]:
if visited[node]==0:
visited[v]+=dfs(node)
return visited[v]
dfs(r)
for _ in range(q):
root=int(sys.stdin.readline())
print(visited[root])
์ค๋๋ง์ DFS๋ฅผ ์ด์ฉํ ๋ฌธ์ ํ์ด์๋ค.
dfs ํจ์๋ฅผ ๋ง๋ค์ด์ ์ฌ๊ท ํจ์๋ก ํ์ํ๋ฉด์, ๊ฐ ๋ ธ๋์ ๋ํด์ ์ฐ๊ฒฐ๋ ์์์ ์๋ฅผ visited ๋ฐฐ์ด์ ์ถ๊ฐํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ค.
์ด๋ฌํ ๊ณผ์ ์ ๋ชจ๋ ๋ง์น๊ณ ๋๋ฉด, visited ๋ฐฐ์ด์ ๊ฐ ๋ ธ๋๋ณ๋ก ์์ ์ ํฌํจํ ์์์ ์๊ฐ ์ ์ฅ๋๋ค.
'์๊ณ ๋ฆฌ์ฆ > ๊ทธ๋ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 17025 ๐ฅ] Icy Perimeter (0) | 2023.07.27 |
---|---|
[๋ฐฑ์ค 1956 ๐ฅ] ์ด๋ (0) | 2023.07.27 |
[๋ฐฑ์ค 11657 ๐ฅ] ํ์๋จธ์ (0) | 2023.07.13 |
[๋ฐฑ์ค 11404 ๐ฅ] ํ๋ก์ด๋ (0) | 2023.07.13 |
[๋ฐฑ์ค 11964 ๐ฅ] Fruit Feast (0) | 2023.07.13 |