留待有缘人修补此题翻译
qoj6662 外环路
题目描述
在遥远的未来,人类进入了许多外星行星。行星X也是其中之一,太空探索公司MR在行星X上建立了基地,进行探测和资源采集活动。
行星X有连接 \(N\) 个基地和 \(N-1\) 个连接着基地的双向通道,可以使用通道往返任意两个不同的基地。也就是说,行星X的基地和通道形成树形结构。
基地上分别贴着 \(0\) 以上 \(N-1\) 以下的不同编号。另外,对于所有 \(0≤i≤N-2\), \(i\) 号通道连接 \(U[i]\) 号基地和 \(V[i]\) 号基地,通道长度为 \(W[i]\) km。
不知不觉中,行星X的开发也进入了稳定期。由于维护所有基地和通道费用高昂,MR决定只保留部分基地,禁用其余基地。
对于任何 \((s,e)(0≤s≤e≤N-1),s,s+1,…,\) 就说只留下 \(e\) 号基地吧。
此时维护成本定义如下:
-
选择0条以上的通道,满足以下条件:这时,选择通道的长度之和最小。(如果选择0条通道,长度之和为0公里。)
对于任意 \(u,v (s≤u<v≤e)\),只能使用选择的通道往返于u号基地和v号基地。中间经过停用的基地是没有关系的。
-
当被选择的偶数通道的长度之和为 \(C\) km时,维护费用为 \(C\)。
因为还没有决定留下什么样的基地,MR首先是所有可能的 \((i,j)(0≤i≤j≤N-1)\)
对于一对 \(i,i+1,…,j\) 我想知道只留下 \(j\) 号基地
大家应该为MR求这个值。但是,由于值可能会变得很大,所以需要求模1000 000 007的余数。
输入规定
大家要实现以下函数。
int maintenance_costs_sum(vector<int> U, vector<int> V, vector<int> W)
- 该函数只被调用一次。
- U、V、W:大小为 \(N-1\) 的整数数组。对于所有\(i(0≤i≤N-2)\),将\(U[i]\)号基地和\(V[i]\)号基地连接的路为\(W[i]\)km的通道。
- 对于所有可能的\((i,j)(0≤i≤j≤N-1)\)对,此函数为 \(i,i+1,…,\)只留下 \(j\) 号基地时的费用
必须返还费用加起来的值除以1000 000 007的余额。
不能在提交的源代码的任何部分运行I/O函数。
数据规模
- \(2 ≤ N ≤ 250 000\)
- $0 ≤ U[i], V [i] ≤ N − 1; U[i] \neq V [i] (0 ≤ i ≤ N − 2) $
- \(1 ≤ W[i] ≤ 10^9 (0 ≤ i ≤ N − 2)\)
样例格式
以下格式接收输入:
• Line \(1\): \(N\)
• Line \(2 + i (0 ≤ i ≤ N − 2)\): \(U[i] \ V[i] \ W[i]\)
输出以下内容:
•Line \(1\): maintenance_costs_sum返回的值
请注意,样例可能与实际评分中使用的测试点不同