def nwd(a, b):
if b == 0:
return a
return nwd(b, a % b)
def nww(a, b):
return (a * b) // nwd(a, b)
def reduce(a):
d = nwd(a[0], a[1])
a[0] = a[0] // d
a[1] = a[1] // d
return a
def add(a, b):
M = nww(a[1], b[1])
L = a[0] * (M // a[1]) + b[0] * (M // b[1])
c = reduce([L, M])
return c
n = int(input())
deg = []
prev = {}
for i in range(n):
prev[i] = []
for i in range(n):
line = input().strip().split()
d = int(line[0])
deg.append(d)
for k in range(1, len(line)):
x = int(line[k]) - 1
prev[x].append(i)
# for i in range(n):
# print(f'prev[{i}] = {prev[i]}')
a = [[1, 1]]
for i in range(1, n):
a.append([0, 1])
if len(prev[i]) > 0 and deg[i] > 0:
for j in prev[i]:
a[i] = add(a[i], a[j])
a[i][1] *= deg[i]
a[i] = reduce(a[i])
# for i in range(n):
# print(f'a[{i}] = {a[i]}')
res = 1
for i in range(1, n):
res = nww(res, a[i][1])
if (res * deg[0]) == 0:
print(1)
else:
print(res * deg[0])
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 47 48 49 50 51 52 53 54 55 56 57 58 59 | def nwd(a, b): if b == 0: return a return nwd(b, a % b) def nww(a, b): return (a * b) // nwd(a, b) def reduce(a): d = nwd(a[0], a[1]) a[0] = a[0] // d a[1] = a[1] // d return a def add(a, b): M = nww(a[1], b[1]) L = a[0] * (M // a[1]) + b[0] * (M // b[1]) c = reduce([L, M]) return c n = int(input()) deg = [] prev = {} for i in range(n): prev[i] = [] for i in range(n): line = input().strip().split() d = int(line[0]) deg.append(d) for k in range(1, len(line)): x = int(line[k]) - 1 prev[x].append(i) # for i in range(n): # print(f'prev[{i}] = {prev[i]}') a = [[1, 1]] for i in range(1, n): a.append([0, 1]) if len(prev[i]) > 0 and deg[i] > 0: for j in prev[i]: a[i] = add(a[i], a[j]) a[i][1] *= deg[i] a[i] = reduce(a[i]) # for i in range(n): # print(f'a[{i}] = {a[i]}') res = 1 for i in range(1, n): res = nww(res, a[i][1]) if (res * deg[0]) == 0: print(1) else: print(res * deg[0]) |
English