CF1346I.Pac-Man 2.0

省选/NOI-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

Polycarp 正在开发一款名为 “Pac-Man” 的经典游戏的新版本。尽管他非常喜欢原始版本的游戏,但他不喜欢其中的某些方面,因此决定稍微改变规则。

在 Polycarp 的版本中,你扮演 Pac-Man,在游戏世界中收集散落的豆子,同时避开危险的鬼魂(与原版没有区别)。Polycarp 不喜欢原版中没有逃脱鬼魂的机会,所以在他的版本中,游戏世界被分为 nn 个安全区域,之间有 mm 条单向路径连接——保证 Pac-Man 可以从任何一个安全区域到达另一个安全区域。由于安全区域是安全的,鬼魂无法在 Pac-Man 在那里时攻击它,它只有在穿越路径时才会受到威胁。Pac-Man 在安全区域 ss 中开始游戏。

所有的豆子都散落在安全区域;最初,第 ii 个安全区域包含 aia_i 个豆子(如果 Pac-Man 在安全区域中,它可以自由地收集其中的所有豆子)。被收集后,豆子会消失,但在游戏世界中的最后一个豆子被收集后,新的豆子会在安全区域中以相同数量重新生成(第 ii 个区域会重新生成 aia_i 个新豆子)。豆子可以无限次重新生成,所以这个游戏基本上是无限的。

Polycarp 已经确定了游戏世界的结构和每个安全区域中的豆子数量。现在他正在尝试判断游戏是否足够困难。游戏中有 qq 个目标,第 ii个目标是从游戏开始时至少收集 CiC_i 个豆子。Polycarp 将第 ii 个目标的难度定义为玩家必须遍历一条单向路径的最小次数,以收集 CiC_i 个豆子(因为只有遍历路径时,Pac-Man 才会处于危险中)。如果 Pac-Man 在收集豆子时多次遍历某条路径,则该路径被计入答案的次数相同。

帮帮 Polycarp 计算出每个目标的难度吧!

简明题意

给定一张有向图,每个安全点有一定点权。对于每一个询问 CC,输出为了使经过点权和大于等于 CC,遍历一条单向路径的最小次数。

输入格式

第一行包含四个整数 nn,mm,qq 和 ss (2≤n≤15;n≤m≤n(n−1);1≤q≤5000;1≤s≤n)(2\le n\le 15;n\le m\leq n(n-1);1\le q\leq5000;1\le s\le n),分别表示安全区域的数量,路径的数量,目标的数量和起始安全区域的编号。

第二行包含 nn 个整数 a1,a2,...,ana_1, a_2, ..., a_n (1≤ai≤109)( 1 \le a_i\le 10^9 ),其中 aia_i 是第 ii 个安全区域中初始颗粒数(以及当世界中最后一个颗粒被收集时在第 ii 个安全区域中重新生成生成的颗粒数)。

然后是 mm 行,每行包含两个整数 viv_i 和 uiu_i (1≤vi,ui≤n;vi≠ui)(1\le v_i ,u_i \le n ; v_i \ne u_i ),表示从安全区 viv_i 到安全区 uiu_i 的单向路径。每个有序对 (vi,ui)(v_i, u_i) 在此部分最多出现一次(从 viv_i 到 uiu_i 没有多个路径),并且可以通过这些路径从一个安全区到达另一个安全区。

最后一行包含 qq 个整数 C1,C2,...,CqC_1,C_2,...,C_q (1≤Ci≤1015)( 1 \le C_i \le 10^{15}),其中 CiC_i 是玩家为了完成第 ii 个目标而必须收集的最小颗粒数。

输出格式

对于每个目标 ii,输出一个整数——它的难度(玩家至少需要沿某条路径行进的最小次数,以收集至少 CiC_i 个豆子)。

说明/提示

考虑样例一。为了收集 55 个小球,玩家应该在安全区域 11(即起始位置)收集 33 个小球,然后移动到区域 33,在那里收集 22 个小球。

为了收集 88 个豆子,玩家应该在安全区 11 收集 33 个豆子,前往 22,收集 11 个豆子,前往 11 而不捡起豆子,前往 33,收集 22 个豆子。现在地图上最后一个豆子被收集,所以它们会重新出现。玩家可以在安全区 33 收集 22 个豆子,现在收集的豆子数量是 88 个。

再来看样例二。

为了收集 77 颗小球,我们可以按照以下步骤进行:2(+3)→3(+2)→4(+2)2(+3)→3(+2)→4(+2)2(+3) \to 3(+2) \to 4(+2)2(+3) \to 3(+2) \to 4(+2)。通过这样的方式,收集到了 77 颗小球。

为了收集 1414 颗小球,我们可以按照以下步骤进行:2(+3)→3(+2)→1(+1)→4(+2)→5(+1)2(+3)→3(+2)→1(+1)→4(+2)→5(+1)2(+3) \to 3(+2) \to 1(+1) \to 4(+2) \to 5(+1)2(+3)\to 3(+2)\to 1(+1)\to 4(+2)\to 5(+1) 重新产生小球 5(+1)→4(+2)→2(+3)5(+1)→4(+2)→2(+3)5(+1) \to 4(+2) \to 2(+3)5(+1)\to 4(+2)\to 2(+3)。通过这样的方式,收集到了 1515 颗小球。

为了收集 2323 颗小球,我们可以按照以下步骤进行:2(+3)→3(+2)→1(+1)→4(+2)→5(+1)2(+3)→3(+2)→1(+1)→4(+2)→5(+1)2(+3) \to 3(+2) \to 1(+1) \to 4(+2) \to 5(+1)2(+3)\to 3(+2)\to 1(+1)\to 4(+2)\to 5(+1) 重新产生小球 5(+1)→4(+2)→2(+3)→3(+2)→1(+1)5(+1)→4(+2)→2(+3)→3(+2)→1(+1)5(+1) \to 4(+2) \to 2(+3) \to 3(+2) \to 1(+1)5(+1)\to 4(+2)\to 2(+3)\to 3(+2)\to 1(+1) 重新产生小球 1(+1)→4(+2)→2(+3)1(+1)→4(+2)→2(+3)1(+1) \to 4(+2) \to 2(+3)1(+1)\to 4(+2)\to 2(+3)。通过这样的方式,收集到了 2424 颗小球。

输入输出样例

  • 输入#1

    3 4 2 1
    3 1 2
    1 2
    2 1
    1 3
    3 1
    5 8

    输出#1

    1
    3
  • 输入#2

    5 7 4 2
    1 3 2 2 1
    2 3
    4 2
    3 4
    3 1
    1 4
    5 4
    4 5
    7 14 23 27

    输出#2

    2
    6
    10
    13
  • 输入#3

    4 4 3 3
    2 3 1 4
    3 4
    4 1
    1 2
    2 3
    13 42 1337

    输出#3

    3
    13
    401

输入解题思路,AI测评打分。不知道怎么写?

首页