#P17141. [NOI 2026] 传送

    ID: 17344 Type: RemoteJudge 5000ms 1024MiB Tried: 0 Accepted: 0 Difficulty: 9 Uploaded By: Tags>数学贪心二分点分治三分NOI交互题2026

[NOI 2026] 传送

题目背景

题面、样例附件来自 QOJ。

提交到洛谷上时,无需引用头文件 #include "teleport.h"。直接将

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++17 或者更高版本编译器编译。

题目描述

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

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

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

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

形式化地,一种通行方式可以用一个长度为 nn 的序列 [a0,…,an−1][a_0,\ldots,a_{n-1}] 表示,其中 ayi=−1a_{y_i}=-1,且对于所有 j≠yij\ne y_i,均有 aja_j 与 jj 相邻,或 aj=na_j=n。每当测试员到达城市 jj(j≠yij\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 的 二元组 序列 (a0,b0),(a1,b1),…,(am−1,bm−1)(a_0,b_0),(a_1,b_1),\ldots,(a_{m-1},b_{m-1}),其中 ai,bia_i,b_i(0≤i<m0\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(0≤i<n−10\le i<n-1)行包含两个非负整数 ui,viu_i,v_i。
    • 第 i+n+1i+n+1(0≤i<m0\le i<m)行包含两个非负整数 xi,yix_i,y_i。
  • 可执行文件将输出以下格式的数据至标准输出:
    • 第 i+1i+1(0≤i<m0\le i<m)行包含两个正整数 ai,bia_i,b_i。
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

提示

【样例 11 解释】

对于第 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,因此期望耗时为 52\frac{5}{2}。
  • 若通行方式为 [1,0,4,−1][1,0,4,-1],则测试员将永远在城市 00 与城市 11 间移动,因此该通行方式不是合理的。

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

【样例 22】

见选手目录下的 teleport/teleport2.in 与 teleport/teleport2.ans。

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

【样例 33】

见选手目录下的 teleport/teleport3.in 与 teleport/teleport3.ans。

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

【样例 44】

见选手目录下的 teleport/teleport4.in 与 teleport/teleport4.ans。

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

【样例 55】

见选手目录下的 teleport/teleport5.in 与 teleport/teleport5.ans。

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

【样例 66】

见选手目录下的 teleport/teleport6.in 与 teleport/teleport6.ans。

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

【样例 77】

见选手目录下的 teleport/teleport7.in 与 teleport/teleport7.ans。

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

【数据范围】

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

  • 2≤n≤5×1052\le n\le5\times10^5,1≤m≤1061\le m\le10^6;
  • 对于所有 0≤i<n−10\le i<n-1,均有 0≤ui,vi<n0\le u_i,v_i<n,且所有 (ui,vi)(u_i,v_i) 构成一棵树;
  • 对于所有 0≤i<m0\le i<m,均有 0≤xi,yi<n0\le x_i,y_i<n 且 xi≠yix_i\ne y_i。

::cute-table{tuack} | 测试点编号 | n≤n\le | m≤m\le | 特殊性质 | |:-:|:-:|:-:|:-:| | 11 | 44 | 2020 | 无 | | 2,32,3 | 55 | 3030 | ^ | | 4∼64\sim6 | 10210^2 | 11 | ^ | | 7,87,8 | 10310^3 | 20002000 | AA | | 99 | ^ | 10610^6 | 无 | | 10,1110,11 | 10510^5 | ^ | AA | | 12∼1512\sim15 | ^ | ^ | 无 | | 1616 | 5×1055\times10^5 | 5×1055\times10^5 | BB | | 17∼2017\sim20 | ^ | 10610^6 | 无 |

特殊性质 AA:对于所有 0≤i<n−10\le i<n-1,均有 ui=iu_i=i 且 vi=i+1v_i=i+1。

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