#P17141. [NOI 2026] 传送

    ID: 2915 传统题 文件IO:teleport 5000ms 1024MiB 尝试: 1 已通过: 1 难度: 7 上传者: 标签>基础算法贪心二分树论点分治其它技巧三分NOI 2026交互题

[NOI 2026] 传送

题目描述

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

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

为了检测传送门的效果,CC 国进行了 mm 次测试。第 ii0i<m0\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。每当测试员到达城市 jjjyij\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),,(am1,bm1)(a_0,b_0),(a_1,b_1),\ldots,(a_{m-1},b_{m-1}),其中 ai,bia_i,b_i0i<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+20i<n10\le i<n-1)行包含两个非负整数 ui,viu_i,v_i
    • i+n+1i+n+10i<m0\le i<m)行包含两个非负整数 xi,yix_i,y_i
  • 可执行文件将输出以下格式的数据至标准输出:
    • i+1i+10i<m0\le i<m)行包含两个正整数 ai,bia_i,b_i

输出格式

输入输出样例 #1

输入 #1

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

输出 #1

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

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

【样例 22

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

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

【样例 33

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

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

【样例 44

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

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

【样例 55

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

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

【样例 66

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

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

【样例 77

见选手目录下的 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

::cute-table{tuack}

测试点编号 nn\le mm\le 特殊性质
11 44 2020
2,32,3 55 3030 ^
464\sim6 10210^2 11
7,87,8 10310^3 20002000 AA
99 ^ 10610^6
10,1110,11 10510^5 ^ AA
121512\sim15 ^
1616 5×1055\times10^5 BB
172017\sim20 ^ 10610^6

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

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

附件下载

teleport.zip 45.25MB