qoj6662

发布时间 2023-07-11 11:21:08作者: cztq

留待有缘人修补此题翻译

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返回的值

请注意,样例可能与实际评分中使用的测试点不同