π©π»πΎ
[λ°±μ€/Python] 1033λ² μΉ΅ν μΌ λ³Έλ¬Έ
1οΈβ£λ¬Έμ μ€λͺ
august14λ μΈμμμ κ°μ₯ λ§μλ μΉ΅ν μΌμ΄λ€. μ΄ μΉ΅ν μΌμ λ§λλ μ νν λ°©λ²μ μμ§ μΈμμ 곡κ°λμ§ μμμ§λ§, λ€μ΄κ°λ μ¬λ£ Nκ°λ 곡κ°λμ΄ μλ€.
κ²½κ·Όμ΄λ μΈν°λ· κ²μμ ν΅ν΄μ μ¬λ£ μ N-1κ°μ λΉμ¨μ μμλκ³ , μ΄ λΉμ¨μ μ΄μ©ν΄μ μΉ΅ν μΌμ λ€μ΄κ°λ μ 체 μ¬λ£μ λΉμ¨μ μμλΌ μ μλ€.
μ΄ μ¬λ£ μ N-1κ°μ λΉμ¨μ΄ μ λ ₯μΌλ‘ μ£Όμ΄μ§λ€. μ΄λ, μΉ΅ν μΌμ λ§λλλ° νμν κ° μ¬λ£μ μμ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€. μ΄λ, νμν μ¬λ£μ μ§λμ λͺ¨λ λν κ°μ΄ μ΅μκ° λμ΄μΌ νλ€. μΉ΅ν μΌμ λ§λλ μ¬λ£μ μμ μ μμ΄κ³ , μ΄ μ§λμ 0λ³΄λ€ μ»€μΌνλ€.
λΉμ¨μ "a b p q"μ κ°μ νμμ΄κ³ , aλ² μ¬λ£μ μ§λμ bλ² μ¬λ£μ μ§λμΌλ‘ λλ κ°μ΄ p/qλΌλ λ»μ΄λ€.
2οΈβ£μ λ ₯
첫째 μ€μ august14λ₯Ό λ§λλλ° νμν μ¬λ£μ κ°μ Nμ΄ μ£Όμ΄μ§λ©°, Nμ 10λ³΄λ€ μκ±°λ κ°μ μμ°μμ΄λ€.
λμ§Έ μ€λΆν° N-1κ°μ μ€μλ μ¬λ£ μμ λΉμ¨μ΄ ν μ€μ νλμ© μ£Όμ΄μ§λλ°, λ¬Έμ μ€λͺ μ λμ¨ νμμΈ "a b p q"λ‘ μ£Όμ΄μ§λ€. μ¬λ£λ 0λ²λΆν° N-1κΉμ§μ΄λ©°, aμ bλ λͺ¨λ N-1λ³΄λ€ μκ±°λ κ°μ μμ΄ μλ μ μμ΄λ€. pμ qλ 9λ³΄λ€ μκ±°λ κ°μ μμ°μμ΄λ€.
3οΈβ£μΆλ ₯
첫째 μ€μ μΉ΅ν μΌμ λ§λλλ° νμν κ° μ¬λ£μ μ§λμ 0λ² μ¬λ£λΆν° μμλλ‘ κ³΅λ°±μΌλ‘ ꡬλΆν΄ μΆλ ₯νλ€.
π©π»π»μμ±ν μ½λ
n = int(input()) # μ¬λ£μ μ
A = [[] for _ in range(n)] # μ¬λ£ μμ λΉμ¨
visited = [False] * n
D = [0] * n # μ¬λ£μ μ μ 보 μ μ₯
lcm = 1
def GCD(a, b):
if b == 0:
return a
else:
return GCD(b, a % b)
def DFS(v):
visited[v] = True
for i in A[v]:
next = i[0] # μμ μ΄λ£¨λ μ¬λ£
if not visited[next]:
D[next] = D[v] * i[2] // i[1]
DFS(next)
for i in range(n-1):
a, b, p, q = map(int, input().split())
A[a].append((b, p, q))
A[b].append((a, q, p))
lcm *= (p * q // GCD(p, q))
D[0] = lcm
DFS(0)
ing_gcd = D[0]
for i in range(1, n):
ing_gcd = GCD(ing_gcd, D[i])
for i in range(n):
print(int(D[i] // ing_gcd), end=' ')
π‘μ½λ μ€λͺ
μ°μ ν΄λΉ λ¬Έμ λ₯Ό νΌ λ°©λ²μ κ°λ΅νκ² μ€λͺ νμλ©΄,
μ λ ₯ λ€μ΄μ¨ λΉμ¨μ ν΄λΉνλ μλ€μ μ΅μ곡배μλ₯Ό λͺ¨λ κ³±ν κ° (κ·ΈλμΌ λΉμ¨μ ν΄λΉνλ μλ€μ μμΈμλ€μ λ€ ν¬ν¨νλκΉ)μ λ³μ lcmμ μ μ₯ν΄μ€¬λ€.
κ·Έλ° λ€μ, μμμ μ¬λ£μ μμ lcmμ΄λΌκ³ μ§μ ν΄μ£Όκ³ ν΄λΉ μ¬λ£μ μμ μ΄λ£¨λ μ¬λ£μ μμ λΉλ‘μ (a * q = b * q)μ ν΅ν΄ ꡬν΄μ€¬λ€.
μ΄ κ³Όμ μμ ꡬν΄μ§ κ° μ¬λ£λ€μ μμ 리μ€νΈ Dμ μ μ₯μ ν΄μ€¬λλ° μ΄λ, Dμ μ μ₯λ μ¬λ£λ€μ μμ μ΅μκ°μ΄ μλλ―λ‘ Dμ μ μ₯λ κ°λ€μ μ΅λ곡μ½μλ₯Ό ꡬν΄μ μ΅λ곡μ½μλ‘ λλ μ£Όλ©΄ κ° μ¬λ£λ€μ μμ΄ μ΅μκ° λλ―λ‘ λ΅μ ꡬν μ μλ€.
μ΄μ ν¨μ DFS()λΆν° μ½λλ₯Ό μ€λͺ νμλ©΄,
if not visited[next]:
D[next] = D[v] * i[2] // i[1] # a : b = p(=i[1]) : q(=i[2])
DFS(next)
β¬οΈ ν¨μ DFS()μμ 맀κ°λ³μλ‘ λ€μ΄μ¨ μ¬λ£(v)μ μμ μ΄λ£¨λ μ¬λ£(next)κ° νμ μ μΌ λ, nextμ μ§λμ λΉλ‘μμΌλ‘ ꡬν΄μ Dμ μ μ₯ν΄μ£Όκ³ μ¬κ·νΈμΆλ‘ nextλ₯Ό νμνλ λΆλΆμ μ½λμ΄λ€.
for i in range(1, n):
ing_gcd = GCD(ing_gcd, D[i])
β¬οΈ μ΄ μ½λλ 리μ€νΈ Dμ μ μ₯λ μ¬λ£ μ§λλ€μ μ΅λ곡μ½μλ₯Ό ꡬνλ μ½λμ΄κ³ , μ΄λ ꡬν΄μ§ ing_gcdλ‘ Dμ λͺ¨λ μμλ€μ λλ μ£Όλ©΄ λ΅μ΄ λλ€.
'μ½λ©ν μ€νΈ > λ°±μ€(BOJ)' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€/Python] 18870λ² μ’ν μμΆ (0) | 2023.04.02 |
---|---|
[λ°±μ€/Python] 18352λ² νΉμ 거리μ λμ μ°ΎκΈ° (0) | 2023.03.21 |
[λ°±μ€/Python] 1934λ² μ΅μ곡배μ (0) | 2023.03.15 |
[λ°±μ€/Python] 1456λ² κ±°μ μμ (0) | 2023.03.15 |
[λ°±μ€/Python] 11689λ² GCD(n, k) = 1 (0) | 2023.03.14 |