题解 | 计树

计树

https://www.nowcoder.com/practice/e2b6744ec3f94f81aad1c6b8a372b5eb

import sys
sys.setrecursionlimit(1 << 25)

n = int(input())
tree = [[] for _ in range(n + 1)]
for _ in range(n - 1):
    u, v = map(int, input().split())
    tree[u].append(v)
    tree[v].append(u)

k = int(input())
V = set(map(int, input().split()))

is_in_v = [False] * (n + 1)
for u in V:
    is_in_v[u] = True

cnt_v = [0] * (n + 1)
lca_cnt = [0] * (n + 1)

def dfs(u, p):
    cur = 1 if is_in_v[u] else 0
    child_sum_sq = 0
    for v in tree[u]:
        if v != p:
            child_v = dfs(v, u)
            cur += child_v
            child_sum_sq += child_v * child_v
    cnt_v[u] = cur
    lca_cnt[u] = cur * cur - child_sum_sq
    return cur

dfs(1, 0)

print(' '.join(map(str, lca_cnt[1:])))

全部评论

相关推荐

不愿透露姓名的神秘牛友
03-15 10:59
已编辑
爱写代码的菜code...:哎,自己当时拿到字节offer的时候也在感叹终于拿到了,自己当时最想去的企业就是字节,结果还是阴差阳错去了鹅厂。祝uu一切顺利!!!
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务