编程题
### 问题描述 蓝桥村的道路图可以看成一幅联通树形图(数据结构中的"树"),其中村政府所在的位置是 $1$ 号点,也就是根节点。每家每户都可以看成一个节点。总共有 $n$ 个节点,$n- 1$ 条边,**每条边就是一条道路**,每条道路会有一个长度 $t$,从节点 $a$ 到 $b$ 的时间等于$a,b$ 之间**最短路径**上的长度之和。 现在村政府获得了一笔经费,这笔经费可以足够整改 $k$ 次道路,每一次整改可以将这条道路的长度减少 $\lfloor \frac{t}{2} \rfloor$。也就是说,对一条长度为 $t$ 的道路进行一次整改,它的长度由 $t$ 变为 $\lceil \frac{t}{2} \rceil$ ,并且一条道路可以经历多次整改。**注意区分"道路"与"路径"的区别,道路只指一条边。** 我们设 $f(x)$ 为从 $1$ 号点到 $x$ 点需要的时间,由于村政府需要长期发布一些通知,所以村长想知道经历整改后可以使得 $\sum _{i=2}^n{f(i)}$ 最小为多少? $\lfloor x \rfloor$ 表示不大于 $x$ 的最大整数,即向下取整。$\lceil x \rceil$ 表示不小于 $x$ 的最小整数,即向上取整。 形式化的说:给定一棵 $n$ 个节点的带权树形图,你有 $k$ 次机会,每次你可以选择一条边,使得它的边权从 $t_i$ 变为 $\lceil \frac{t_i}{2} \rceil$,询问你所有点到根节点的路径和最小是多少? ### 输入格式 第一行一个数字 $T$ ,代表测试组数。 对于每组输入,由以下部分组成: 第一行两个整数 $n, k$,保证 $2 \le n \le 10^4,0 \le k \le 10^9$。 接下来 $n - 1$ 行,每行三个整数 $u_i, v_i, t_i$ ,表示 $u_i$ 和 $v_i$ 之间有一条长度为 $t_i$ 的道路。$u_i,v_i \in [1,n],t_i \in [1,10^9]$ 数据保证是一棵树。并且 $\sum{n} \le 10^5$。 ### 输出格式 输出 $T$ 行,每行一个整数 $W$ ,表示路径和。 ### 样例输入 ```bash 1 3 2 1 2 4 1 3 5 ``` ### 样例输出 ```bash 5 ``` ### 说明 $(1, 2)$ 之间整修一次,$(1,3)$ 之间整修一次。
查看答案
赣ICP备20007335号-2