def GCD(a,b):
c = 0
while b!=0:
c = b
b = a%b
a = c
return a
def main():
ans = 1
q = 0
gcd = 0
n = int(input())
l = [0 for i in range(1, n + 1)]
m = [1 for i in range(1, n + 1)]
for i in range(1, n + 10):
l.append(0)
m.append(1)
l[1] = 1;
for i in range(1,n+1):
xd = list(map(int,input().split()))
q = xd[0]
pom = q
if q > 0:
gcd = GCD(l[i], pom)
pom /= gcd
l[i] /= gcd
m[i] *= pom
if l[i] > 0:
ans = ans / GCD(ans, m[i]) * m[i];
for j in range(1, q + 1):
a = xd[j]
al = l[i]
am = m[i]
if al == 0:
continue
al = al * (m[a] / GCD(am, m[a]));
l[a] = l[a] * (am / GCD(am, m[a]));
l[a] = l[a] + al;
m[a] = m[a] * (am / GCD(am, m[a]));
gcd = GCD(l[a], m[a])
l[a] = l[a] / gcd;
m[a] = m[a] / gcd;
print(int(ans))
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): c = 0 while b!=0: c = b b = a%b a = c return a def main(): ans = 1 q = 0 gcd = 0 n = int(input()) l = [0 for i in range(1, n + 1)] m = [1 for i in range(1, n + 1)] for i in range(1, n + 10): l.append(0) m.append(1) l[1] = 1; for i in range(1,n+1): xd = list(map(int,input().split())) q = xd[0] pom = q if q > 0: gcd = GCD(l[i], pom) pom /= gcd l[i] /= gcd m[i] *= pom if l[i] > 0: ans = ans / GCD(ans, m[i]) * m[i]; for j in range(1, q + 1): a = xd[j] al = l[i] am = m[i] if al == 0: continue al = al * (m[a] / GCD(am, m[a])); l[a] = l[a] * (am / GCD(am, m[a])); l[a] = l[a] + al; m[a] = m[a] * (am / GCD(am, m[a])); gcd = GCD(l[a], m[a]) l[a] = l[a] / gcd; m[a] = m[a] / gcd; print(int(ans)) main() |
English