#lg17141. [NOI 2026] 传送

[NOI 2026] 传送

AdditionalFile5762.zip

#5762. 「NOI2026」传送

标签: 传统 | 时间限制: 3500 ms | 内存限制: 1024 MiB |

题目描述

C 国共有 nn 座城市,编号为 0n10\sim n-1。这 nn 座城市由 n1n-1 条道路连接,形成树形结构。第 ii (0i<n1)(0\le i<n-1) 条道路连接城市 uiu_iviv_i,从其一端的城市到达另一端需要耗费 11 单位的时间。

为了提升通行效率,C 国研发了一种新型传送门。每座城市中均有一扇传送门。使用传送门同样耗费 11 单位时间,但由于系统尚不稳定,它会将使用者等概率地传送到所有 nn 座城市之一。注意:使用传送门也可能被传送到当前所在的城市。

为了检测传送门的效果,C 国进行了 mm 次测试。第 ii (0i<m)(0\le i<m) 次测试要求测试员从城市 xix_i 出发,去往城市 yiy_i。在从起点前往终点的过程中,测试员可以选择沿道路移动,或是使用传送门。由于可能的通行方式很多,测试员需要计算出期望耗时最短的通行方式。

具体地,定义一种通行方式如下:对于每座非终点的城市,选择一座与其相邻的城市或是使用传送门,每当测试员到达该城市时,均按事先确定的方式移动,即移动至该相邻的城市,或使用传送门。

形式化地,一种通行方式可以用一个长度为 nn 的序列 [a0,,an1][a_0,\ldots,a_{n-1}] 表示,其中 ayi=1a_{y_i}=-1,且对于所有 jyij\ne y_i,均有 aja_jjj 相邻,或 aj=na_j=n。每当测试员到达城市 jj (jyi)(j\ne y_i) 时,若 aj<na_j<n,则测试员将移动到 aja_j,否则测试员将使用传送门。

称一种通行方式是合理的,当且仅当其期望耗时为有限值。

对于每次测试,请计算在所有合理的通行方式中,期望耗时的最小值。

实现细节

选手不需要,也不应该实现 main 函数。

选手需要确保提交的程序源文件包含头文件 teleport.h,即在程序开头加入以下代码:

#include "teleport.h"

选手需要在提交的程序源文件 teleport.cpp 中实现以下函数:

std::vector<std::pair<long long, int>> teleport(int c, int n, int m, std::vector<int> u, std::vector<int> v, std::vector<int> x, std::vector<int> y);
  • c,n,mc,n,m 分别表示测试点编号、城市数量和测试的次数。c=0c=0 表示该测试点为样例。
  • u,vu,v 分别表示每条道路连接的两座城市。
  • x,yx,y 分别表示每次测试的起点与终点。
  • 该函数需要返回一个长度恰好mm二元组d序列 (a0,b0),(a1,b1),,(am1,bm1)(a_0,b_0),(a_1,b_1),\ldots,(a_{m-1},b_{m-1}),其中 ai,bia_i,b_i (0i<m)(0\le i<m) 表示第 ii 次测试中,期望耗时的最小值的最简分数形式aibi\frac{a_i}{b_i}。特别地,若期望耗时的最小值为正整数,则视为 bi=1b_i=1
  • 对于每个测试点,该函数会被评测程序调用恰好一次。

本试题目录下的 template_teleport.cpp 是提供的示例代码,选手可参考并实现自己的代码。

测试程序方式

选手可以在本题目录下使用如下命令编译得到可执行文件:

g++ grader.cpp teleport.cpp -o teleport -O2 -std=c++14 -static

对于编译得到的可执行文件 teleport

  • 可执行文件将从标准输入读入以下格式的数据:
    • 第一行包含三个非负整数 c,n,mc,n,m
    • i+2i+2 (0i<n1)(0\le i<n-1) 行包含两个非负整数 ui,viu_i,v_i
    • i+n+1i+n+1 (0i<m)(0\le i<m) 行包含两个非负整数 xi,yix_i,y_i
  • 可执行文件将输出以下格式的数据至标准输出:
    • i+1i+1 (0i<m)(0\le i<m) 行包含两个正整数 ai,bia_i,b_i

样例 1

输入

0 4 4
0 1
1 2
2 3
0 3
0 1
0 2
1 2

输出

7 3
1 1
2 1
1 1

对于第 00 次测试:

  • 若通行方式为 [1,2,3,1][1,2,3,-1],则耗时为固定值 33
  • 若通行方式为 [4,2,3,1][4,2,3,-1],则测试员将不断使用传送门直至离开城市 00,因此期望耗时为 73\frac{7}{3}
  • 若通行方式为 [4,4,3,1][4,4,3,-1],则测试员将不断使用传送门直至到达城市 22 或城市 33,因此期望耗时为 33
  • 若通行方式为 [1,0,4,1][1,0,4,-1],则测试员将永远在城市 00 与城市 11 间移动,因此该通行方式不是合理的。

可以证明,期望耗时的最小值为 73\frac{7}{3}

样例 2

见选手目录下的 teleport/teleport2.inteleport/teleport2.ans

该样例满足测试点 2,32,3 的约束条件。

样例 3

见选手目录下的 teleport/teleport3.inteleport/teleport3.ans

该样例满足测试点 464\sim6 的约束条件。

样例 4

见选手目录下的 teleport/teleport4.inteleport/teleport4.ans

该样例满足测试点 787\sim8 的约束条件。

样例 5

见选手目录下的 teleport/teleport5.inteleport/teleport5.ans

该样例满足测试点 99 的约束条件。

样例 6

见选手目录下的 teleport/teleport6.inteleport/teleport6.ans

该样例满足测试点 1616 的约束条件。

样例 7

见选手目录下的 teleport/teleport7.inteleport/teleport7.ans

该样例满足测试点 172017\sim20 的约束条件。

数据范围

对于所有测试数据,均有:

  • 2n5×1052\le n\le5\times10^51m1061\le m\le10^6
  • 对于所有 0i<n10\le i<n-1,均有 0ui,vi<n0\le u_i,v_i<n,且所有 (ui,vi)(u_i,v_i) 构成一棵树;
  • 对于所有 0i<m0\le i<m,均有 0xi,yi<n0\le x_i,y_i<nxiyix_i\ne y_i
测试点编号 nn\le mm\le 特殊性质
11 44 2020
2,32,3 55 3030
464\sim6 10210^2 11
7,87,8 10310^3 20002000 A
99 10610^6
10,1110,11 10510^5 A
121512\sim15
1616 5×1055\times10^5 5×1055\times10^5 B
172017\sim20 10610^6

特殊性质 A:对于所有 0i<n10\le i<n-1,均有 ui=iu_i=ivi=i+1v_i=i+1

特殊性质 B:对于所有 0i<m0\le i<m,均有 yi=0y_i=0