hugDog
Android DevLog
hugDog
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๐Ÿ™Œ Hello? (162)
    • ๐Ÿงฉ์•ˆ๋“œ๋กœ์ด๋“œ (12)
      • ๊ฐœ๋… ์ •๋ฆฌ (5)
      • ๋ฒ„๊ทธ ํ•ด๊ฒฐ (4)
      • ๊ธฐํƒ€ (3)
    • ๐Ÿ”์•Œ๊ณ ๋ฆฌ์ฆ˜ (54)
      • ๊ฐœ๋… (0)
      • ๋ฐฑ์ค€ (48)
      • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (6)
    • ๐Ÿ“„๊ฐœ๋ฐœ ์ผ์ง€ (0)
      • FINPO (0)
    • ๐Ÿ”คํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (71)
      • C++ ์ •๋ฆฌ (49)
      • C++๊ธฐ์ดˆํ”Œ๋Ÿฌ์Šค ์—ฐ์Šต๋ฌธ์ œ (20)
      • Kotlin (2)
    • โญProject (1)
    • ๐ŸšดTIL (13)
      • Clean Code (13)
    • ๐Ÿšฉ๊ธฐํƒ€ (9)
      • ๋ชฉํ‘œ (6)
      • ์ผ์ƒ (3)
      • ๋ฌธ์„œ (0)

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
hugDog

Android DevLog

[Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 3584๋ฒˆ: ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ
๐Ÿ”์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 3584๋ฒˆ: ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ

2022. 1. 17. 14:40
728x90

๋ฌธ์ œ

 

ํ’€์ด

๋ฐฑ์ค€ LCA ๋ฌธ์ œ์™€ ๋™์ผํ•œ ์ค„ ์•Œ์•˜๋Š”๋ฐ ์•„๋‹ˆ์—ˆ๋‹ค.

https://www.acmicpc.net/problem/11437

 

11437๋ฒˆ: LCA

์ฒซ์งธ ์ค„์— ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง€๊ณ , ๋‹ค์Œ N-1๊ฐœ ์ค„์—๋Š” ํŠธ๋ฆฌ ์ƒ์—์„œ ์—ฐ๊ฒฐ๋œ ๋‘ ์ •์ ์ด ์ฃผ์–ด์ง„๋‹ค. ๊ทธ ๋‹ค์Œ ์ค„์—๋Š” ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ์„ ์•Œ๊ณ ์‹ถ์€ ์Œ์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง€๊ณ , ๋‹ค์Œ M๊ฐœ ์ค„์—๋Š” ์ •

www.acmicpc.net

 

์ฐจ์ด์ ์€ LCA์˜ ๊ฒฝ์šฐ ์–‘๋ฐฉํ–ฅ ๊ฐ„์„ ์œผ๋กœ ์ž…๋ ฅ์ด ์ฃผ์–ด์ง€์ง€๋งŒ, ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ์˜ ๊ฒฝ์šฐ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ„์„ ์ด ์ฃผ์–ด์ง„๋‹ค.

๋˜ํ•œ LCA๋Š” ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ 1๋กœ ๊ณ ์ •๋˜์ง€๋งŒ, ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ์˜ ๊ฒฝ์šฐ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ์ง์ ‘ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

 

์ฝ”๋“œ

import sys
sys.setrecursionlimit(10**9)
input = sys.stdin.readline


def dfs(x, depth):
    visited[x] = True
    d[x] = depth
    for child in graph[x]:
        if visited[child]:  continue
        dfs(child, depth + 1)
        
t = int(input())

for _ in range(t):
    n = int(input())
    graph = [[] for _ in range(n + 1)]
    visited = [False] * (n + 1)
    parent = [0] * (n + 1)
    d = [0] * (n + 1)
    
    for _ in range(n - 1):
        a, b = map(int, input().split())
        graph[a].append(b)
        parent[b] = a
    
    for i in range(1, n + 1):
        if parent[i] == 0:
            dfs(i, 0)
            break
    
    a, b = map(int, input().split())
    while d[a] != d[b]:
        if d[a] > d[b]:
            a = parent[a]
        else:
            b = parent[b]
    
    while a != b:
        a = parent[a]
        b = parent[b]
    
    print(a)

 

๋งˆ๋ฌด๋ฆฌ

LCA๋„ ์–ด๋А ์ •๋„ ๋งˆ์Šคํ„ฐํ•œ ๋“ฏ ์‹ถ๋‹ค. ใ…Žใ…Ž

 

728x90
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ
    '๐Ÿ”์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 17616๋ฒˆ: ๋“ฑ์ˆ˜ ์ฐพ๊ธฐ
    • [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 16947๋ฒˆ: ์„œ์šธ ์ง€ํ•˜์ฒ  2ํ˜ธ์„ 
    • [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 2573๋ฒˆ: ๋น™์‚ฐ
    • [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 2668๋ฒˆ: ์ˆซ์ž๊ณ ๋ฅด๊ธฐ
    hugDog
    hugDog
    ์•ˆ๋“œ๋กœ์ด๋“œ ๊ณต๋ถ€ ์ค‘์ธ ํ•™์ƒ์ž…๋‹ˆ๋‹ค!

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”