def gcd(a, b):
if b == 0:
return a
return gcd(b, a % b)
def lcm(a, b):
return a * b // gcd(a, b)
def main():
n = int(input())
wch = [[] for i in range(0, n+2)]
wych = [0 for i in range(0, n+2)]
cyc_len = [1 for i in range(0, n+2)]
bags_cnt = [0 for i in range (0, n + 2)]
for source in range(1, n+1):
line = list(map(int, input().strip().split()))
wych[source] = line[0]
for destination in line[1:]:
wch[destination].append(source)
if wych[source] == 0:
wch[n+1].append(source)
wych[source] = 1
wych[n+1] = 1
cyc_len[1] = wych[1]
bags_cnt[1] = cyc_len[1]
# print("i", 1, "cyc_len =", cyc_len[1], "bags_cnt = ", bags_cnt[1])
# print(wch)
for i in range(2, n+2):
for j in wch[i]:
cyc_len[i] = lcm(cyc_len[i], cyc_len[j])
for j in wch[i]:
bags_cnt[i] += bags_cnt[j] * (cyc_len[i] // cyc_len[j]) // wych[j]
# Liczba walizek, musi być podzielna przez liczbę wychodzących krawędzi
repeats = wych[i] // gcd(wych[i], bags_cnt[i])
cyc_len[i] *= repeats
bags_cnt[i] *= repeats
# print("i", i, "cyc_len =", cyc_len[i], "bags_cnt = ", bags_cnt[i])
print(cyc_len[n+1])
main()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | def gcd(a, b): if b == 0: return a return gcd(b, a % b) def lcm(a, b): return a * b // gcd(a, b) def main(): n = int(input()) wch = [[] for i in range(0, n+2)] wych = [0 for i in range(0, n+2)] cyc_len = [1 for i in range(0, n+2)] bags_cnt = [0 for i in range (0, n + 2)] for source in range(1, n+1): line = list(map(int, input().strip().split())) wych[source] = line[0] for destination in line[1:]: wch[destination].append(source) if wych[source] == 0: wch[n+1].append(source) wych[source] = 1 wych[n+1] = 1 cyc_len[1] = wych[1] bags_cnt[1] = cyc_len[1] # print("i", 1, "cyc_len =", cyc_len[1], "bags_cnt = ", bags_cnt[1]) # print(wch) for i in range(2, n+2): for j in wch[i]: cyc_len[i] = lcm(cyc_len[i], cyc_len[j]) for j in wch[i]: bags_cnt[i] += bags_cnt[j] * (cyc_len[i] // cyc_len[j]) // wych[j] # Liczba walizek, musi być podzielna przez liczbę wychodzących krawędzi repeats = wych[i] // gcd(wych[i], bags_cnt[i]) cyc_len[i] *= repeats bags_cnt[i] *= repeats # print("i", i, "cyc_len =", cyc_len[i], "bags_cnt = ", bags_cnt[i]) print(cyc_len[n+1]) main() |
English