๋ฌธ์ ๋งํฌ
๋ฌธ์ ์์ฝ
node๊ฐ N๊ฐ, vertex๊ฐ N-1๊ฐ์ธ tree๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ leaf์๋ ๋ง์ด ์๊ณ , ํ ํด์ ํ ๋ฒ์ฉ ์์ง์ฌ์ root์ ๋๋ฌํ๋ฉด ๋ง์ ์ ๊ฑฐํ๋๋ฐ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ์์ง์ผ ๋ง์ด ์์ด์ง๋ ์ฌ๋์ด ํจ๋ฐฐํ๋ ๊ฒ์์ ํ๊ณ ์๋ค. ์ฃผ์ด์ง๋ tree์์ ๊ฒ์์ ํ ๋, ์ ๊ณต์ ํ๋ ํ์์ด๊ฐ ์ด๊ธด๋ค๋ฉด "Yes" ์ง๋ค๋ฉด "No"๋ฅผ ์ถ๋ ฅํ๋ผ.
ํ์ด ์ค๋ช
tree๋ ์ํ์ด ์๋ ๊ทธ๋ํ์ด๋ค. ๊ทธ์ค ํนํ ์ด์ง ํธ๋ฆฌ๋ leaf node๋ฅผ ์ ์ธํ ๋๋จธ์ง๊ฐ ๋ ๊ฐ์ฉ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง ํธ๋ฆฌ๋ฅผ ๋งํ๋ฉฐ, ์ ๋ฌธ์ ์์๋ ๊ทธ๋ฌํ ์กฐ๊ฑด์ด ๋ฌ๋ ค์์ง ์์๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ธ ํธ๋ฆฌ๋ก ๊ฐ์ ํ๋ค.
๋ฌธ์ ๋ฅผ ํ ๋, ์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์ ์์ ์ ์๋ ๊ฒ๋ค์ ์ฝ๋๋ก ๊ตฌํํ๊ณ ๊ฑฐ๊ธฐ์์ ๋ชฉํ๋ก ํ๋ ๊ฐ์ ๊ตฌํ๊ณ ์ ํ๋ ๋ฐฉ์์ผ๋ก ์ ๊ทผํ๋ ํธ์ธ๋ฐ, #ํธ๋ฆฌ ์ ํ์ ๋ฌธ์ ๋ ๊ฑฐ์ ์ฒ์ ์ ๋๋ก ํ์ด๋ณด๋ ๊ฒ์ด์ด์ ์ฒ์์๋ dictionary๋ก ๊ตฌํํ๋ คํ๋ค.
๊ทธ๋ฐ๋ฐ, ์ด ๋ฌธ์ ๊ฐ ํธ๋ฆฌ leaf์ depth๋ฅผ ๊ตฌํด์ผํ๋ ๋ฌธ์ ์ด๋ค๋ณด๋, root๋ก๋ถํฐ dictionary๋ฅผ ๋ง๋ค ๋์๋ key๋ฅผ ๋ถ๋ชจ ๋ ธ๋๋ก ์ก๋ ๊ฒ ํจ์จ์ ์ธ๋ฐ depth๋ฅผ ๊ตฌํ ๋๋ leaf๋ก๋ถํฐ ์ฌ๋ผ์ค๋ ๋ฐฉ๋ฒ์ ์ง๊ด์ ์ผ๋ก ๋ ์ฌ๋ฆฌ๋ค๋ณด๋ ๋๋ฌด ๋นํจ์จ์ ์ธ ์์ด๋์ด์๋ค.
์ปจ๋์ ๋ ์ ์ข์์ ํ์ฐธ ๊ณ ๋ฏผํ๋ค๊ฐ ๊ฒฐ๊ตญ ๋ค๋ฅธ ๋ถ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์๋ค. (๊ฐ์ฌํฉ๋๋ค ๐)
๋ฌด๋ฐฉํฅ ๊ทธ๋ํ(Undirected Graph)๋ ์๋ฐฉํฅ ์ ๋ณด๋ฅผ ๋ค ์ ์ฅํ๋ ๊ฒ์ด ํจ์จ์ ์ผ ์ ์๋ค.
์์ ๋ถ์ ๊ฐ linked๋ผ๋ 2์ฐจ์ list๋ก ์ ์ ๊ฐ์ ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ node1 index์ append(node2), node2 index์ append(node1)์ ๋ฐฉ์์ผ๋ก ๋ชจ๋ ์ ์ฅํ์๋๋ฐ ๋จ๋ฐฉํฅ ๊ทธ๋ํ(directed graph)๊ฐ ์๋ ๊ฒฝ์ฐ์ ์ด๋ฌํ ๋ฐฉ์์ด ์ถํ ํ์ํ ๋ ํจ์ฌ ํจ๊ณผ์ ์ด๋ผ๊ณ ์๊ฐํ์๋ค.
pop() ๋ณด๋ค visited list๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ธ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๋ํ ๊ทธ๋ํ ํ์ ๊ณผ์ ์์ ์ด๋ฏธ ๋ฐฉ๋ฌธํ๋ ๋ ธ๋์ ๋ํด ์ฌ๋ฌ ๋ฒ depth๋ฅผ ์ธก์ ํ๊ฑฐ๋, ์ด๋ค ํจ์๋ฅผ ์คํํ๋ ๊ฒฝ์ฐ ์๋์น์๊ฒ ๊ฐ์ด ์ค๋ณตํ์ฌ ๋ํด์ง๊ฑฐ๋ ์๋ฏธ์์ด ๊ฐ์ ํจ์๋ฅผ ์ฌ๋ฌ ๋ฒ ์คํํ์ฌ ๋นํจ์จ์ ์ธ ์ฝ๋๊ฐ ๋ ์ ์๋ค.
๋ฐ๋ผ์, ์ด๋ฅผ ์ฝ๋ ์ฐจ์์์ ๋ฐฉ์งํ์ฌ์ผํ๋๋ฐ ์ด์ ๋ช ๋ฌธ์ ์์ remove(O(N))์ ๊ฐ์ ํจ์๋ฅผ ์ฌ์ฉํ ๋ฐ ์์์ผ๋ ์ด๋ณด๋ค remove๋ pop(index)์ ์๊ฐ ๋ณต์ก๋๊ฐ O(N)์ด๊ณ list[index]์ ๊ฐ์ ์ธ๋ฑ์ค ๊ฐ ํธ์ถ์ด O(1)์ธ ๊ฒ๋ง ๋น๊ตํ๋๋ผ๋ visited list๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ด ์ฝ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฐจ์ด์๋ ํจ์ฌ ํจ์จ์ ์ด๋ผ๋ ๊ฒ์ ์ ์ ์์๋ค.
์ ์ ํ ๋ชฉ์ ์ ๋ง๋ ์๋ฃ ๊ตฌ์กฐ ์ ํ๊ณผ ๋ฐ์ดํฐ ์ ์ฅ ํํ๋ ์ค์ํ๋ค.
๋ค๋ฅธ ์ฌ๋๋ค์ด ์ฃผ๋ก ์ฌ์ฉํ๋ ํ์ด ๋ฐฉ์์ด ์ ์ฃผ๋ก ์ฌ์ฉํ๊ฒ ๋์๋์ง ์๊ฒ ๋๋ ๊ณผ์ ์ ํฅ๋ฏธ์ง์งํ๋ค ๐
์ ์ฒด ํ์ด ์ฝ๋
import sys
sys.setrecursionlimit(500000)
input=sys.stdin.readline
N=int(input())
visited=[0 for _ in range(N+1)]
linked=[[] for _ in range(N+1)]
depth=[0 for _ in range(N+1)]
for i in range(N-1):
node1, node2=map(int, input().split())
linked[node1].append(node2)
linked[node2].append(node1)
def depth_measure(start_node):
visited[start_node]=1
for end_node in linked[start_node]:
if visited[end_node]==0:
depth[end_node]=depth[start_node]+1
depth_measure(end_node)
depth_measure(1)
total_depth=0
for i in range(2, N+1):
if len(linked[i])==1:
total_depth+=depth[i]
if total_depth%2==1:
print("Yes")
elif total_depth%2==0:
print("No")