#XBS202511. Escape the Backrooms
Escape the Backrooms
题目背景
后室(The Backrooms)是一个源于都市传说、现已发展为庞大跨媒介恐怖 IP 的异次元世界,核心设定是 “现实世界的故障漏洞”—— 当人类因意外触发某种 “空间 BUG”(如瞬间失神、穿越特定门扉、遭遇维度扭曲),就会脱离 “前室”(Frontrooms,即正常现实世界)。不幸的是,某天在上课时突然走神了,醒来时就已经来到了后室世界的level 998244353层级。这是一个由多个独立房间以及多个连接任意两个房间的单向通道所构成的层级。
题目描述
Level 998244353层级由 个房间(标号为从到)以及m个连接任意两个房间的单向通道组成。每条单向通道用表示,其中 为该通道的起点房间, 为该通道的终点房间,每个通道的恐怖值为 (注意所有通道都是单向的,即对于通道,你只能从房间经该通道到达 房间)。换句话说,你可以把该层级看作一个加权有向图。
一开始,拥有初始的san值(即耐力值)为 ,当她穿越一条恐怖值为 的通道后,她的耐力值会变为,(其中为向下取整函数),当的耐力值下降到 时,则被视为耐力值耗尽,便不能继续行动。
举个例子:假设开始时的耐力值为 。在穿越一条恐怖值为 的通道后,她的耐力值变为 (因为 )。如果她接着穿越另一个难度为 的通道,她的耐力值会下降到 ( )。最后,在穿越一条难度为 的通道后,她的耐力值将变为 ( ),此时她的耐力值将耗尽。
由于随时都不知道她在哪个房间,也不知道每条通道通向哪里,所以提出了 个问题,对于第个问题,她想问:如果她从房间 开始,初始的耐力值为 ,每次她都会随机选择一条可以走的通道,那么在耐力值耗尽前,她至少要走多少条通道?(注意:如果走过她以前走过的通道,她的耐力值仍会以同样的方式减少,即从 变为 )。
保证每个房间都至少有一条出去的通道(通道的起点房间和终点房间可能是相同的)。
输入格式
第一行包含三个整数 $n,m,Q (1 \leq n, Q \leq 2 \times 10^5,n \leq m \leq 5 \times 10^5)$,分别代表房间数量、单向通道数量和查询次数。
接下来的 行分别包含三个整数,表示从到 的单向通道,难度值为。
可以保证 $\forall i \in [1, n], \exists u, \mathrm{ s.t. } u = i$ .
接下来的行分别包含两个整数,表示第个查询,即:如果Alice从房间 出发,初始的耐力值为 ,那么在耐力值耗尽前,她必须经过的通道的个数的最小值是多少。
输出格式
输出 行,每行包含一个整数 ,表示对于第 个查询,在穿越至少 个通道之后将耗尽耐力值。
样例
3 4 7
1 2 2
2 3 4
3 2 3
3 3 2
1 10
2 9
3 2
2 8
3 1
1 7
2 4
3
2
1
2
1
2
2
注意
本题输入数据量较大,请使用scanf与printf完成数据的读入与输出,或者在主函数开头添加下面代码以优化cin与cout:
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
或者你可以手写快读。
再次注意,行末换行请使用\n,或者添加以下宏定义以使用endl:
#define endl '\n'
时间限制:
空间限制:
相关
在下列比赛中: