请说一下项目中间遇到的难点和关键技术 以及如何解决收获哪些东西?
区块链毕设网qklbishe.com为您提供问题的解答
请说一下项目中间遇到的难点和关键技术 以及如何解决收获哪些东西?
这道题可以使用二分法来解决。我们可以二分答案 ,表示 Venn 最少需要多少武力值才能收集到至少 个货物。
具体做法是,我们首先遍历整棵树,计算出每个点向下子树(不包括父亲节点)的货物储备之和。然后从根节点开始 DFS,维护一个父节点 表示当前已经经过的点,以及当前货物储备之和.
在 DFS 的过程中,如果当前点 的货物储备加上之前遍历的货物储备之和大于等于 ,则说明 Venn 可以在 武力值内收集到至少 个货物,可以将二分的答案上界调整为 。否则,则说明 Venn 不能在 武力值内收集到至少 个货物,需要将二分的答案下界调整为 。
最终,当二分的答案下界和上界相等时,这个值就是 Venn 最少需要的武力值。
n, W = map(int, input().split()) a = [0] + list(map(int, input().split())) g = [[] for _ in range(n+1)] # 构建树 for i in range(n-1): u, v, w = map(int, input().split()) g[u].append((v, w)) g[v].append((u, w)) def dfs(u, fa, maxw): # 假设不存在环 cnt = 0 for v, w in g[u]: # 遍历子节点 if v == fa: continue if w <= maxw: cnt += a[v-1] cnt += dfs(v, u, maxw) else: continue return cnt l, r = 0, 1000000000 while l <= r: mid = l + (r-l) // 2 if dfs(1, 0, mid) >= W: r = mid - 1 else: l = mid + 1 print(l)
37:40
以上就是关于问题请说一下项目中间遇到的难点和关键技术 以及如何解决收获哪些东西?的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训