""" Google Code Jam Farewell Round C - Problem C Author : chaotic_iak Language: PyPy (Python 3.9.10) """ ################################################### SOLUTION def initialize_solution(): ... def main(): N,K = read() S = [0] + read() P = [0,0] + read() child = [[] for _ in range(N+1)] for i in range(2,N+1): child[P[i]].append(i) ans = 0 for i in range(1,N+1): mx = (S[i]-1)//K total = sum(S[j] <= mx for j in range(1,N+1)) totalunder = 0 dfs = [] dfs.extend(child[i]) while dfs: p = dfs.pop() dfs.extend(child[p]) if S[p] <= mx: totalunder += 1 ans += totalunder * (total - totalunder) return ans ############################################### PROBLEM TYPE HAS_TESTCASES = True INTERACTIVE = False INTERACTIVE_WRONG_ANSWER = "" #################################################### HELPERS import sys def read_str(): ipt = input().strip() if INTERACTIVE and ipt == INTERACTIVE_WRONG_ANSWER: sys.exit() return ipt def read(mapping=int): ipt = input().strip() if INTERACTIVE and ipt == INTERACTIVE_WRONG_ANSWER: sys.exit() return list(map(mapping, ipt.split())) def write_str(obj, end="\n"): global OUTPUT OUTPUT.append(obj + end) def write(*obj, sep=" ", end="\n"): global OUTPUT OUTPUT.append(sep.join(map(str, obj)) + end) def flush(): global OUTPUT print("".join(OUTPUT), end="", flush=True) OUTPUT = [] def solve_testcase(): result = main() if result is not None: write(result) OUTPUT = [] initialize_solution() if HAS_TESTCASES: TOTAL_CASES = int(input()) else: TOTAL_CASES = 1 for CASE_NUMBER in range(TOTAL_CASES): write("Case #" + str(CASE_NUMBER+1) + ": ", end="") solve_testcase() flush() READ_FROM_FILE = ""