#HK4259. 「KTSC 2024 R1」铁路 2

「KTSC 2024 R1」铁路 2

注意事项

在 LibreOJ 上,由于语言限制,目前只支持以下语言的提交:

  • C++(标准为 C++ 17 及以上)

请在提交源代码前添加 #include "railroad2.h"

输入格式

题目译自 2024년도 국제정보올림피아드 대표학생 선발고사 - 1차 선발고사 T4 「철도 2

IOI 国有 NN 个城市和连接这些城市的 N1N-1 条双向铁路,任意两个不同的城市都可以通过铁路互相到达。也就是说,IOI 国的铁路网络是一个树结构。城市编号从 00N1N-1,铁路编号从 00N2N-2。对于每条编号为 ii 的铁路,它连接了编号为 U[i]U[i]V[i]V[i] 的城市,长度为 W[i]W[i]

在 IOI 国的任何一个城市出发,都可以乘坐直达列车直接到达另一个城市。也就是说,对于所有 u,vu,v (0u,vN1,uv)(0 \leq u, v \leq N-1, u \neq v)N(N1)N(N-1) 个城市对 (u,v)(u, v),从 uu 城市出发到达 vv 城市的直达列车存在。乘坐这趟直达列车时,直到到达 vv 城市之前不能下车,这趟列车的耗时等于 IOI 国铁路网络中从 uu 城市到 vv 城市的唯一简单路径上所有铁路的长度之和。

作为铁路爱好者,你喜欢长时间乘坐一列火车,享受悠闲的时光。因此,乘坐耗时长的直达列车会让你感到更大的乐趣。

具体来说,对于两个不同的城市 x,yx, y,乐趣 joy(x,y)\operatorname{joy}(x, y) 定义为满足以下条件的最大正整数 DD

  • xx 城市出发,乘坐耗时至少为 DD 的直达列车,经过有限次后到达 yy 城市。

你需要编写一个程序,计算满足 0x,yN1,xy0 \leq x, y \leq N-1, x \neq y 的所有 N(N1)N(N-1) 个城市对 (x,y)(x, y)joy(x,y)\operatorname{joy}(x, y) 之和,并对 1000000007(=109+7)1000000007\left(=10^{9}+7\right) 取模。

实现细节

你需要实现以下函数:

int travel(vector<int> U, vector<int> V, vector<int> W);
  • 该函数只会被调用一次。
  • U, V, W:大小为 N1N-1 的整数数组。对于每个 ii (0iN2)(0 \leq i \leq N-2),存在一条连接 U[i]U[i]V[i]V[i] 的长度为 W[i]W[i] 的铁路。
  • 该函数需要返回满足 0x,yN1,xy0 \leq x, y \leq N-1, x \neq y 的所有 N(N1)N(N-1) 个城市对 (x,y)(x, y)joy(x,y)\operatorname{joy}(x, y) 之和,并对 1000000007(=109+7)1000000007\left(=10^{9}+7\right) 取模。

注意,提交的代码中不应包含任何输入输出操作。

样例 1

考虑 N=5,U=[0,1,0,0],V=[1,2,3,4],W=[1,2,3,2]N=5, U=[0,1,0,0], V=[1,2,3,4], W=[1,2,3,2] 的情况。

评测程序将调用如下函数:

travel([0,1,0,0], [1,2,3,4], [1,2,3,2]);

下图展示了城市和铁路的布局:

计算 xx 城市和 yy 城市之间直达列车的耗时如下表所示:

计算所有可能的 (x,y)(x, y) 城市对的 joy(x,y)\operatorname{joy}(x, y) 如下表所示:

  • joy(0,1)=3\operatorname{joy}(0,1)=3。从 00 城市出发,乘坐直达列车到 22 城市,再乘坐直达列车到 44 城市,最后乘坐直达列车到 11 城市。三趟直达列车的耗时分别为 3,5,43,5,4
  • joy(1,2)=4\operatorname{joy}(1,2)=4。从 11 城市出发,乘坐直达列车到 33 城市,再乘坐直达列车到 22 城市。两趟直达列车的耗时分别为 4466
  • joy(2,3)=6\operatorname{joy}(2,3)=6。从 22 城市出发,乘坐直达列车到 33 城市。这趟直达列车的耗时为 66

函数应返回 80

样例 2

考虑 N=5,U=[0,0,0,0],V=[1,2,3,4],W=[3,2,2,1]N=5, U=[0,0,0,0], V=[1,2,3,4], W=[3,2,2,1] 的情况。

评测程序将调用如下函数:

travel([0, 0, 0, 0], [1,2,3,4], [3,2,2,1]);

计算所有可能的 (x,y)(x, y) 城市对的 joy(x,y)\operatorname{joy}(x, y) 如下表所示:

函数应返回 78

样例 3

考虑 N=6,U=[0,1,2,3,4],V=[1,2,3,4,5],W=[3,1,4,1,5]N=6, U=[0,1,2,3,4], V=[1,2,3,4,5], W=[3,1,4,1,5] 的情况。

评测程序将调用如下函数:

travel([0, 1, 2, 3, 4], [1, 2, 3, 4, 5], [3, 1, 4, 1, 5]);

计算所有可能的 (x,y)(x, y) 城市对的 joy(x,y)\operatorname{joy}(x, y) 如下表所示:

函数应返回 284

数据范围与提示

对于所有输入数据,满足:

  • 2N51052 \leq N \leq 5\cdot 10^5
  • IOI 国的铁路网络是一个树结构
  • 对于所有 ii (0iN2)(0 \leq i \leq N-2)0U[i],V[i]N1;U[i]V[i]0 \leq U[i], V[i] \leq N-1 ; U[i] \neq V[i]
  • 对于所有 ii (0iN2)(0 \leq i \leq N-2)1W[i]1091 \leq W[i] \leq 10^9

详细子任务附加限制及分值如下表所示。

子任务 分值 附加限制
11 33 N50N \leq 50
22 66 N500N \leq 500
33 1919 N2000N \leq 2000
44 55 N8000N \leq 8000
对于所有 ii (0iN2)(0 \leq i \leq N-2)U[i]=0U[i]=0
55 77 N8000N \leq 8000
对于所有 ii (0iN2)(0 \leq i \leq N-2)U[i]=i,V[i]=i+1U[i]=i, V[i]=i+1
66 1515 N8000N \leq 8000
77 44 对于所有 ii (0iN2)(0 \leq i \leq N-2)U[i]=0U[i]=0
88 1111 对于所有 ii (0iN2)(0 \leq i \leq N-2)U[i]=i;V[i]=i+1U[i]=i ; V[i]=i+1
99 3030 无附加限制

示例评测程序

示例评测程序按以下格式读取输入:

  • 11 行:NN
  • 2+i2+i (0iN2)(0 \leq i \leq N-2) 行:U[i]V[i]W[i]U[i]\,V[i]\,W[i]

示例评测程序将输出:

  • 11 行:travel 函数返回的值

注意,示例评测程序可能与实际评测程序不同。