[Gold II] Title: 칵테일, Time: 44 ms, Memory: 34536 KB -BaekjoonHub
This commit is contained in:
36
백준/Gold/1033. 칵테일/README.md
Normal file
36
백준/Gold/1033. 칵테일/README.md
Normal file
@@ -0,0 +1,36 @@
|
||||
# [Gold II] 칵테일 - 1033
|
||||
|
||||
[문제 링크](https://www.acmicpc.net/problem/1033)
|
||||
|
||||
### 성능 요약
|
||||
|
||||
메모리: 34536 KB, 시간: 44 ms
|
||||
|
||||
### 분류
|
||||
|
||||
유클리드 호제법, 그래프 이론, 그래프 탐색, 수학, 정수론
|
||||
|
||||
### 제출 일자
|
||||
|
||||
2025년 2월 25일 18:15:23
|
||||
|
||||
### 문제 설명
|
||||
|
||||
<p>august14는 세상에서 가장 맛있는 칵테일이다. 이 칵테일을 만드는 정확한 방법은 아직 세상에 공개되지 않았지만, 들어가는 재료 N개는 공개되어 있다. </p>
|
||||
|
||||
<p>경근이는 인터넷 검색을 통해서 재료 쌍 N-1개의 비율을 알아냈고, 이 비율을 이용해서 칵테일에 들어가는 전체 재료의 비율을 알아낼 수 있다.</p>
|
||||
|
||||
<p>총 재료 쌍 N-1개의 비율이 입력으로 주어진다. 이때, 칵테일을 만드는데 필요한 각 재료의 양을 구하는 프로그램을 작성하시오. 이때, 필요한 재료의 질량을 모두 더한 값이 최소가 되어야 한다. 칵테일을 만드는 재료의 양은 정수이고, 총 질량은 0보다 커야한다.</p>
|
||||
|
||||
<p>비율은 "a b p q"와 같은 형식이고, a번 재료의 질량을 b번 재료의 질량으로 나눈 값이 p/q라는 뜻이다.</p>
|
||||
|
||||
### 입력
|
||||
|
||||
<p>첫째 줄에 august14를 만드는데 필요한 재료의 개수 N이 주어지며, N은 10보다 작거나 같은 자연수이다.</p>
|
||||
|
||||
<p>둘째 줄부터 N-1개의 줄에는 재료 쌍의 비율이 한 줄에 하나씩 주어지는데, 문제 설명에 나온 형식인 "a b p q"로 주어진다. 재료는 0번부터 N-1까지이며, a와 b는 모두 N-1보다 작거나 같은 음이 아닌 정수이다. p와 q는 9보다 작거나 같은 자연수이다.</p>
|
||||
|
||||
### 출력
|
||||
|
||||
<p>첫째 줄에 칵테일을 만드는데 필요한 각 재료의 질량을 0번 재료부터 순서대로 공백으로 구분해 출력한다.</p>
|
||||
|
||||
43
백준/Gold/1033. 칵테일/칵테일.py
Normal file
43
백준/Gold/1033. 칵테일/칵테일.py
Normal file
@@ -0,0 +1,43 @@
|
||||
import sys
|
||||
import math
|
||||
|
||||
sys.setrecursionlimit(10**6)
|
||||
|
||||
input = sys.stdin.readline
|
||||
|
||||
N = int(input())
|
||||
|
||||
A = [[] for i 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)
|
||||
mgcd = D[0]
|
||||
|
||||
for i in range(1, N):
|
||||
mgcd = gcd(mgcd, D[i])
|
||||
|
||||
for i in range(N):
|
||||
print(int(D[i]//mgcd), end=' ')
|
||||
Reference in New Issue
Block a user