[BOJ][๐ŸŸก5][๋ฐฑ์ค€#15681] ํŠธ๋ฆฌ์™€ ์ฟผ๋ฆฌ

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #15681


๋ฌธ์ œ

๊ฐ„์„ ์— ๊ฐ€์ค‘์น˜์™€ ๋ฐฉํ–ฅ์„ฑ์ด ์—†๋Š” ์ž„์˜์˜ ๋ฃจํŠธ ์žˆ๋Š” ํŠธ๋ฆฌ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์•„๋ž˜์˜ ์ฟผ๋ฆฌ์— ๋‹ตํ•ด๋ณด๋„๋ก ํ•˜์ž.

์ •์  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์ค„์— ๊ฑธ์ณ ๊ฐ ์ฟผ๋ฆฌ์˜ ๋‹ต์„ ์ •์ˆ˜ ํ•˜๋‚˜๋กœ ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ

์ž…๋ ฅ

9 5 3
1 3
4 3
5 4
5 6
6 7
2 3
9 6
6 8
5
4
8


์ถœ๋ ฅ

9
4
1


My Sol

import sys
input = sys.stdin.readline
sys.setrecursionlimit(200000)

def calc_subtree(u):
    global visit, rels, S
    if visit[u]: return 0
    visit[u] = 1

    cnt = 1
    for v in rels[u]:
        if visit[v]: continue
        cnt += calc_subtree(v)

    S[u] = cnt
    return cnt


V, R, Q = map(int, input().split())
rels = [[] for _ in range(V+1)]
visit = [0]*(V+1)
S = [0]*(V+1)

for _ in range(V-1):
    u, v = map(int, input().split())
    rels[u].append(v)
    rels[v].append(u)

calc_subtree(R)
for _ in range(Q):
    print(S[int(input())])

DFS์™€ DP๋ฅผ ํ™œ์šฉํ•ด์„œ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. DFS์˜ ์ข…๋ฃŒ์กฐ๊ฑด์— ์ฃผ์˜ํ•œ๋‹ค.

  1. visit ๋ฐฐ์—ด์ด 1, ์ฆ‰ ๋ฐฉ๋ฌธํ•œ ๊ฒฝ์šฐ ์ƒ์œ„ ๋…ธ๋“œ์ธ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•˜๊ณ  0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  2. leaf ๋…ธ๋“œ๋Š” ์ƒ์œ„ ๋…ธ๋“œ๋งŒ ์กด์žฌํ•˜๊ณ  ์ด๋Š” visit์ด๋ฏ€๋กœ 0์„ ๋ฐ˜ํ™˜ํ•ด 1๋กœ ์ดˆ๊ธฐํ™”ํ•œ cnt ์ž์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ฆ‰, leaf ๋…ธ๋“œ๋Š” ์„œ๋ธŒ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ ๊ฐœ์ˆ˜๊ฐ€ 1๊ฐœ์ด๋‹ค.
  3. ์ƒ์œ„ ๋…ธ๋“œ๋Š” ํ•˜์œ„ ๋…ธ๋“œ 1~2๊ฐœ์— ๋Œ€ํ•ด ๊ฐ๊ฐ์˜ ์„œ๋ธŒํŠธ๋ฆฌ ๊ฐœ์ˆ˜ + ์ž๊ธฐ ์ž์‹ ์˜ ๊ฐœ์ˆ˜์ธ 1์„ ๋”ํ•œ ๊ฐ’์ด ์„œ๋ธŒํŠธ๋ฆฌ ๊ฐœ์ˆ˜์ด๋‹ค.
  4. R๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๋…ธ๋“œ ๊ฐœ์ˆ˜๋ฅผ ๋ชจ๋‘ ๊ณ„์‚ฐํ•ด์ฃผ๊ณ , Q๊ฐœ์— ๋Œ€ํ•˜์—ฌ ์ถœ๋ ฅํ•˜๋ฉด ๋˜๊ฒ ๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!


๋ชจ๋ฒ”๋‹ต์•ˆ

์ถœ์ฒ˜

# empty

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ