【kickstart 2020 round D】第3题Python 解题思路

继续总结round D 第3题解题思路,不知道是不是因为递归栈深度超出导致test 2 skip

题目3 Beauty Tress
解题思路:
每个node被访问的概率

代码:only work for test 1

from collections import defaultdict
T=int(input())
for tt in range(T):
    N,A,B=[int(s) for s in input().split()]
    tree=[int(s) for s in input().split()]
    G=defaultdict(list)
    for i in range(len(tree)):
        G[tree[i]].append(i+2)
    mpA=defaultdict(int)
    mpB=defaultdict(int)
    ans=0
    def dfs(u,d):
        global ans
        if not u:
            return        
        sA=mpA[d%A]
        sB=mpB[d%B]
        mpA[d%A]+=1
        mpB[d%B]+=1
        for v in G[u]:
            dfs(v,d+1)
        dA=mpA[d%A]
        dB=mpB[d%B]
        ans+=(dA-sA)/N+(dB-sB)/N-(dA-sA)*(dB-sB)/N/N
    dfs(1,0)
    print('Case #{}: {}'.format(tt+1,ans))

refer 同Heltion’s code

第4题实在太艰难了,我还在探索。。

你可能感兴趣的:(kickstart)