https://www.acmicpc.net/problem/15900
15900๋ฒ: ๋๋ฌด ํ์ถ
ํ์์ ์ฌ์ด๊ฐ ์ข์ง ์๋ ์ฑ์์ด์ ํ์์ด๊ฐ ๋๋์ด ์ ๋๋ก ํ ํ ๋ถ์ผ๋ ค๊ณ ํ๋ค. ์ฑ์์ด์ ํ์์ด ๋๊ณผ ๋ชจ๋ ๋๊ฐ์ด ์นํ ์ธ์ญ์ด๊ฐ ๋๊ฒฐ ์ข ๋ชฉ์ ์ ํด ๊ฐ์ ธ์๋ค. ๋ฐ๋ก '๋๋ฌด ํ์ถ' ์ด๋ผ๋ ๋ณด๋๊ฒ
www.acmicpc.net
๋ฌธ์
ํ์์ ์ฌ์ด๊ฐ ์ข์ง ์๋ ์ฑ์์ด์ ํ์์ด๊ฐ ๋๋์ด ์ ๋๋ก ํ ํ ๋ถ์ผ๋ ค๊ณ ํ๋ค. ์ฑ์์ด์ ํ์์ด ๋๊ณผ ๋ชจ๋ ๋๊ฐ์ด ์นํ ์ธ์ญ์ด๊ฐ ๋๊ฒฐ ์ข ๋ชฉ์ ์ ํด ๊ฐ์ ธ์๋ค. ๋ฐ๋ก '๋๋ฌด ํ์ถ' ์ด๋ผ๋ ๋ณด๋๊ฒ์์ด๋ค.
'๋๋ฌด ํ์ถ' ์ N๊ฐ์ ์ ์ ์ด ์๋ ํธ๋ฆฌ ๋ชจ์์ผ๋ก ์๊ธด ๊ฒ์ํ๊ณผ ๋ช ๊ฐ์ ๊ฒ์๋ง๋ก ์ด๋ฃจ์ด์ง๋ค. ํธ๋ฆฌ์ ๊ฐ ์ ์ ์๋ 1๋ฒ๋ถํฐ N๋ฒ๊น์ง ๋ฒํธ๊ฐ ๋ถ์ด์๋ค. 1๋ฒ ์ ์ ์ '๋ฃจํธ ๋ ธ๋' ๋ผ๊ณ ๋ถ๋ฆฌ๋ฉฐ, ์ด ๋ฃจํธ ๋ ธ๋๋ฅผ ์ค์ฌ์ผ๋ก ์ ์ ๊ฐ์ ๋ถ๋ชจ-์์ ๊ด๊ณ๊ฐ ๋ง๋ค์ด์ง๋ค. ์์์ด ์๋ ๋ ธ๋๋ '๋ฆฌํ ๋ ธ๋' ๋ผ๊ณ ๋ถ๋ฆฐ๋ค.
์ด ๊ฒ์์ ๋ ์ฌ๋์ด ๋ฒ๊ฐ์ ๊ฐ๋ฉด์ ๊ฒ์ํ์ ๋์ฌ์๋ ๊ฒ์๋ง์ ์์ง์ด๋ ๊ฒ์์ด๋ค. ์ฒ์์๋ ํธ๋ฆฌ์ ๋ชจ๋ ๋ฆฌํ ๋ ธ๋์ ๊ฒ์๋ง์ด ํ๋์ฉ ๋์ฌ์๋ ์ฑ๋ก ์์ํ๋ค. ์ด๋ค ์ฌ๋์ ์ฐจ๋ก๊ฐ ์ค๋ฉด, ๊ทธ ์ฌ๋์ ํ์ฌ ์กด์ฌํ๋ ๊ฒ์๋ง ์ค ์๋ฌด๊ฑฐ๋ ํ๋๋ฅผ ๊ณจ๋ผ ๊ทธ ๋ง์ด ๋์ฌ์๋ ๋ ธ๋์ ๋ถ๋ชจ ๋ ธ๋๋ก ์ฎ๊ธด๋ค. ์ด ๊ณผ์ ์์ ํ ๋ ธ๋์ ์ฌ๋ฌ ๊ฐ์ ๊ฒ์๋ง์ด ๋์ด๊ฒ ๋ ์๋ ์๋ค. ์ด๋ ๊ฒ ์ฎ๊ธด ํ์ ๋ง์ฝ ๊ทธ ๊ฒ์๋ง์ด ๋ฃจํธ ๋ ธ๋์ ๋์ฐฉํ๋ค๋ฉด ๊ทธ ๊ฒ์๋ง์ ์ฆ์ ์ ๊ฑฐํ๋ค. ๋ชจ๋ ๊ณผ์ ์ ๋ง์น๋ฉด ๋ค์ ์ฌ๋์๊ฒ ์ฐจ๋ก๋ฅผ ๋๊ธด๋ค. ์ด๋ฐ ์์ผ๋ก ๊ณ์ ์งํํ๋ค๊ฐ ๊ฒ์๋ง์ด ๊ฒ์ํ์ ์กด์ฌํ์ง ์์ ๊ณ ๋ฅผ ์ ์๋ ์ฌ๋์ด ์ง๊ฒ ๋๋ค.
์ฑ์์ด๋ฅผ ์๋ณธ ํ์์ด๋ ์ฟจํ๊ฒ ์ด ๊ฒ์์ ์ ์ ์ฑ์์ด์๊ฒ ์ค๋ฒ๋ ธ๋ค. ๋ฐ๋ผ์ ์ฑ์์ด๊ฐ ๋จผ์ ์์ํ๊ณ ํ์์ด๊ฐ ๋์ค์ ์์ํ๋ค. ๊ทธ๋์ ํ์์ด์ ๋๊ฒฐ์ ํ๋ฉด ๋งค๋ฒ ์ง๊ธฐ๋ง ํ๋ ์ฑ์์ด๋ ๋ง์์์ ๋ถ๋ ธ๊ฐ ๊ฐ๋ ์์๋ค. ์ด๋ฒ ๋๊ฒฐ์์๋ ๋ฐ๋์ ์ด๊ฒจ์ ํ์์ด์ ์ฝ๋ฅผ ๊บพ์ด์ฃผ๊ณ ์ถ๋ค. ๊ทธ๋์ ๊ฒ์์ ์์ํ๊ธฐ ์ ์ ๊ฒ์ํ์ ๋ชจ์๋ง ๋ณด๊ณ ์ด ๊ฒ์์ ์ด๊ธธ ์ ์์์ง ๋ฏธ๋ฆฌ ์์๋ณด๊ณ ์ถ์ด์ก๋ค. ์ฑ์์ด๊ฐ ์ด ๊ฒ์์ ์ด๊ธธ ์ ์์์ง ์์์ง๋ฅผ ์๋ ค์ฃผ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด ์ฑ์์ด๋ฅผ ๋์์ฃผ์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํธ๋ฆฌ์ ์ ์ ๊ฐ์ N(2 ≤ N ≤ 500,000)์ด ์ฃผ์ด์ง๋ค.
๋์งธ ์ค๋ถํฐ N-1์ค์ ๊ฑธ์ณ ํธ๋ฆฌ์ ๊ฐ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. ์ค๋ง๋ค ๋๊ฐ์ ์์ฐ์ a, b(1 ≤ a, b ≤ N, a ≠ b)๊ฐ ์ฃผ์ด์ง๋๋ฐ, ์ด๋ a์ b ์ฌ์ด์ ๊ฐ์ ์ด ์กด์ฌํ๋ค๋ ๋ป์ด๋ค.
์ถ๋ ฅ
์ฑ์์ด๊ฐ ์ต์ ์ ๋คํ์ ๋ ์ด ๊ฒ์์ ์ด๊ธธ ์ ์์ผ๋ฉด Yes, ์๋๋ฉด No๋ฅผ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ์ด
# ์ด๋ ๊ฑฐ๋ฆฌ๊ฐ ํ์์ฌ์ผ ์ฑ์์ด๊ฐ ์ด๊ธธ ์ ์๋ค.
import sys
from collections import deque
n=int(sys.stdin.readline())
tree=[[] for _ in range(n+1)]
for _ in range(n-1):
a,b=map(int, sys.stdin.readline().split(' '))
tree[a].append(b)
tree[b].append(a)
ans=0
def bfs(cur, parent, depth):
global ans
queue=deque()
queue.append((cur, parent, depth))
while queue:
c, p, d=queue.popleft()
# ๋ฆฌํ ๋
ธ๋์ธ์ง ํ์ธ(์ฐ๊ฒฐ๋ ๋
ธ๋๊ฐ ํ๋์ด๊ณ , ๊ทธ ๋
ธ๋๊ฐ ๋ถ๋ชจ ๋ชจ๋์ด๋ฉด ๋ฆฌํ ๋
ธ๋)
if len(tree[c])==1 and tree[c][0]==p:
ans+=d
continue
for node in tree[c]:
if node!=p:
queue.append((node, c, d+1))
bfs(1,-1,0)
if ans%2==1:
print('Yes')
else:
print('No')
- ์ฐ์ ์ฑ์์ด๊ฐ ์ ์ด๊ธฐ ๋๋ฌธ์ ๋ฃจํธ ๋ ธ๋์์ ๋ฆฌํ ๋ ธ๋๊น์ง์ ์ด์ด์ง๋ ๊ฐ์ ์ ๊ฐ์๊ฐ ํ์์ฌ์ผ ์ฑ์์ด๊ฐ ์ด๊ธธ ์ ์๋ค.
- ์๋ ์์์ ๊ฐ์ด, ๊ฐ์ ์ ๊ฐ์๊ฐ ์ง์๋ก 4๊ฐ์ธ ๊ฒฝ์ฐ ์ฑ์์ด๊ฐ ์ง๊ณ , ํ์๋ก 3๊ฐ์ธ ๊ฒฝ์ฐ ์ฑ์์ด ์ด๊ธด๋ค.
- (์ฑ์-ํ์-์ฑ์-ํ์) -> ์ฑ์์ด๊ฐ ๋ง์ ๊ณ ๋ฅผ ์ฐจ๋ก์ ๊ณ ๋ฅผ ๋ง์ด ์์
- (์ฑ์-ํ์-์ฑ์) -> ํ์์ด๊ฐ ๋ง์ ๊ณ ๋ฅผ ์ฐจ๋ก์ ๊ณ ๋ฅผ ๋ง์ด ์์
- ์ฒ์์ ๋ค์๊ณผ ๊ฐ์ด DFS๋ก ๊ตฌํํ์๋ค.
def dfs(cur, parent, depth):
global ans
# ์ฐ๊ฒฐ๋ ๋
ธ๋๊ฐ ํ๋์ด๊ณ , ๊ทธ ์ฐ๊ฒฐ๋ ๋
ธ๋๊ฐ ๋ถ๋ชจ์ผ ๊ฒฝ์ฐ ๊ทธ ๋
ธ๋๋ ๋ฆฌํ ๋
ธ๋
if len(tree[cur])==1 and tree[cur][0]==parent:
ans+=depth
return
for node in tree[cur]:
if node==parent:
continue
dfs(node, cur, depth+1)
- ๊ธฐ๋ณธ์ ์ผ๋ก DFS์ BFS์ ์๊ฐ ๋ณต์ก๋๊ฐ ๋์ผํ์ง๋ง, ์ฌ๊ท์ ์ฝํ ํ์ด์ฌ์ ํน์ฑ์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ ๊ฒ ๊ฐ๋ค. ใ ใ ..(์๋ฌด๋ฆฌ ์๊ฐํด๋ ์์ธ์ ์ด๊ฒ๋ฟ์ธ๋ฐ.. ํน์ ์์๋ ๋ถ ๊ณ์๋ฉด ๋๊ธ ๋ฌ์์ฃผ์๋ฉด ์ ๋ง ๊ฐ์ฌํ๊ฒ ์ต๋๋ค..!!)
- ๊ทธ๋์ ์ ์ฝ๋์ ๊ฐ์ด BFS๋ก ๋ณ๊ฒฝํ๋ค.
- ํ์ (ํ์ฌ ๋ ธ๋, ๋ถ๋ชจ ๋ ธ๋, ๊น์ด)๋ฅผ ๋ฃ์ด์ฃผ๋ฉด์ ํ์ฌ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๋ ธ๋ ์ค ๋ถ๋ชจ ๋ ธ๋๊ฐ ์๋ ๋ ธ๋๋ค์ ํ์ ๋ฃ์ด์ฃผ๋ฉด์ ๊น์ด๋ฅผ +1ํด์ฃผ๋ฉด ๋๋ค.
- ์ด๋ค ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๋ ธ๋๊ฐ 1๊ฐ์ด๋ฉด์ ๊ทธ ๋ ธ๋๊ฐ ๋ถ๋ชจ ๋ ธ๋์ผ ๊ฒฝ์ฐ ๋ฆฌํ ๋ ธ๋๋ ๋ป์ด๋ฏ๋ก ์ ์ฅ๋ depth๋ฅผ ans์ ๋ํด์ค๋ค.
- BFS ํ์์ด ๋๋๋ฉด ans๊ฐ ํ์์ด๋ฉด Yes๋ฅผ ์ถ๋ ฅํ๊ณ , ์ง์์ด๋ฉด No๋ฅผ ์ถ๋ ฅํ๋ค.
'์๊ณ ๋ฆฌ์ฆ > ๊ทธ๋ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 2251 ๐ฅ] ๋ฌผํต (0) | 2023.09.24 |
---|---|
[๋ฐฑ์ค 25552 ๐ฅ] ์๋ ์์ธกํ๊ธฐ (0) | 2023.09.13 |
[๋ฐฑ์ค 14888 ๐ฅ] ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ (1) | 2023.08.31 |
[๋ฐฑ์ค 1525 ๐ฅ] ํผ์ฆ (0) | 2023.08.28 |
[softeer level 3] 7์ฐจ ์ ๊ธฐ ์ง๋จ ํ๊ฐ - ์์๋๋ก ๋ฐฉ๋ฌธํ๊ธฐ (0) | 2023.08.26 |