LCA๋ "Lowest Common Ancestor" ๊ฐ์ฅ ๊ฐ๊น์ด ๊ณตํต ์กฐ์์ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
๋ฐฑ์ค 3584๋ฒ์ ํ๋ฉด์ ์ดํดํด๋ณด์ฅ
ํด๋น ํธ๋ฆฌ์์ 3๋ฒ๊ณผ 2๋ฒ์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ณตํต ์กฐ์์ 10๋ฒ์ด๋ผ๋ ๊ฒ์ ๋ฐ๋ก ์ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด a์b๊ฐ ์ฃผ์ด์ก์ ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ต์ ๊ณตํต ์กฐ์์ ์ฐพ์๋ณด์.
Rule
๐ a์ ์กฐ์์ ๋ชจ๋ ์ฐพ์ ๋ฆฌ์คํธ๋ก ๋ง๋ ๋ค.
๐ b์ ์กฐ์์ ๋ชจ๋ ์ฐพ์ ๋ฆฌ์คํธ๋ก ๋ง๋ ๋ค. (a,b์ ๋ง์ง๋ง ๋ฆฌ์คํธ๋ root๋ค.)
๐ ๋ ๋ฆฌ์คํธ ๋ชจ๋ root์์ ์์ํด ์๋ก ๋ค๋ฅธ ๊ฐ์ด ๋์ฌ ๋ ๊น์ง index-1 ํ๋ค.
๐ ์๋ก ๋ค๋ฅธ ๊ฐ์ด ๋์ค๋ฉด index+1 ์ ์๋ ๊ฐ์ด ์ต์ ๊ณตํต ์กฐ์์ด๋ค.
ex) a=3, b=2 ์ผ ๋
a_parents = [3, 16, 10, 4, 8]
b_parents = [2, 10, 4, 8]
๋ง์ง๋ง ๊ฐ์ด ๋ค๋ฅผ ๋ a๋ 16์ b๋ 2๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ค. index+1ํ๋ฉด ๋ ๋ค 10์ ๊ฐ๋ฆฌํจ๋ค.
๊ทธ๋ฌ๋ฏ๋ก 3๊ณผ 2์ ๊ณตํต ์กฐ์์ 10์ด๋ค.
Code
import sys
t=int(sys.stdin.readline())
for case in range(t):
n=int(sys.stdin.readline())
parents=[0 for x in range(n+1)]
for i in range(n-1):
a,b=map(int, sys.stdin.readline().split())
parents[b]=a
a,b=map(int, sys.stdin.readline().split())
a_parents=[a]
b_parents=[b]
#a์ ์กฐ์ ์ฐพ๊ธฐ
while parents[a]:
a_parents.append(parents[a])
a=parents[a]
#b์ ์กฐ์ ์ฐพ๊ธฐ
while parents[b]:
b_parents.append(parents[b])
b=parents[b]
#๋ง์ง๋ง ๊ฐ์ด root์ด๋ฏ๋ก ๋์์ ๋ถํฐ ์์
a_spot=len(a_parents)-1
b_spot=len(b_parents)-1
while a_parents[a_spot]==b_parents[b_spot]:
a_spot-=1
b_spot-=1
print(a_parents[a_spot+1])
'๐ Algorithm > Tip' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ (DP) (0) | 2022.02.17 |
---|---|
[Python] ์ต์ํ(MIN heap) / ์ต๋ํ(MAX heap) (0) | 2022.01.31 |
[Algorithm] Dijkstra ๋ค์ต์คํธ๋ผ ์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ (0) | 2021.03.11 |
[Algorithm] ๋๋น ์ฐ์ ํ์ BFS / ๊น์ด ์ฐ์ ํ์ DFS (0) | 2020.08.24 |