init
This commit is contained in:
commit
851751ea87
82 changed files with 2093 additions and 0 deletions
51
7A.py
Normal file
51
7A.py
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
import sys
|
||||
|
||||
data = sys.stdin.read().split()
|
||||
n, m = int(data[0]), int(data[1])
|
||||
parents = [0] * n
|
||||
idx = 2
|
||||
for i in range(1, n):
|
||||
parents[i] = int(data[idx])
|
||||
idx += 1
|
||||
a1, a2 = int(data[idx]), int(data[idx+1])
|
||||
x, y, z = int(data[idx+2]), int(data[idx+3]), int(data[idx+4])
|
||||
adj = [[] for _ in range(n)]
|
||||
for i in range(1, n):
|
||||
adj[parents[i]].append(i)
|
||||
depth = [0] * n
|
||||
q = [0]
|
||||
for u in q:
|
||||
for v in adj[u]:
|
||||
depth[v] = depth[u] + 1
|
||||
q.append(v)
|
||||
up = [[0] * 18 for _ in range(n)]
|
||||
for i in range(1, n):
|
||||
up[i][0] = parents[i]
|
||||
for k in range(1, 18):
|
||||
for i in range(n):
|
||||
up[i][k] = up[up[i][k-1]][k-1]
|
||||
a = [0] * (2 * m + 1)
|
||||
a[1], a[2] = a1, a2
|
||||
for i in range(3, 2 * m + 1):
|
||||
a[i] = (x * a[i-2] + y * a[i-1] + z) % n
|
||||
ans = 0
|
||||
v = 0
|
||||
for i in range(1, m + 1):
|
||||
u = (a[2*i-1] + v) % n
|
||||
vq = a[2*i]
|
||||
if depth[u] < depth[vq]:
|
||||
u, vq = vq, u
|
||||
diff = depth[u] - depth[vq]
|
||||
for k in range(18):
|
||||
if (diff >> k) & 1:
|
||||
u = up[u][k]
|
||||
if u == vq:
|
||||
v = u
|
||||
else:
|
||||
for k in range(17, -1, -1):
|
||||
if up[u][k] != up[vq][k]:
|
||||
u = up[u][k]
|
||||
vq = up[vq][k]
|
||||
v = up[u][0]
|
||||
ans += v
|
||||
print(ans)
|
||||
Loading…
Add table
Add a link
Reference in a new issue