AT_abc286_e.[ABC286E] Souvenir

普及+/提高

通过率:0%

AC君温馨提醒

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

题目描述

从前有 nn 座岛,每个岛上有 aia_i 个金币,各个岛间有若干条单向航线相连。

你从某个岛开始旅行,经过一个岛(包括最开始所在的岛)就会拿走上面的金币。

现在问你 qq 个问题:从岛 uiu_i 旅行到岛 viv_i,最少要走几条航线,以及恰好走这么多条航线最多能获得多少金币。如果根本无法到达 viv_i,输出 Impossible。

询问之间相互独立。

输入格式

输入第一行一个整数 nn 表示岛的数量。

接下来一行 nn 个整数表示每个岛上的金币数。

接下来 nn 行每行一个长为 nn 的字符串,第 ii 行字符串的第 jj 个字符若为 Y 则表示岛 ii 和 jj 间有单向航线,否则表示没有。

接下来一行一个整数 qq 表示询问次数。

最后 qq 行每行两个整数 ui,viu_i,v_i,询问你从岛 uiu_i 旅行到岛 viv_i 最少要走几条航线,以及恰好走这么多条航线最多能获得多少金币。

输出格式

对于每个询问输出一行:

  • 若 uiu_i 不能到达 viv_i,输出 Impossible;
  • 否则,输出从岛 uiu_i 旅行到岛 viv_i 最少要走几条航线,以及恰好走这么多条航线最多能获得多少金币。

样例解释 1

这些岛的结构如下:

  • 对于第 11 个询问,因为岛 11 有一条航线通往岛 33,显然最少航线为 11 条,此时能拿到岛 11 和岛 33 上的金币共 30+70=10030+70=100 个。
  • 对于第 22 个询问,可以证明最少航线为 22 条,有两种方案 3→4→13 \rarr 4 \rarr 1 和 3→5→13 \rarr 5 \rarr 1,总金币分别为 70+20+30=12070+20+30=120 和 70+60+30=16070+60+30=160,故最多金币为 160160。
  • 对于第 33 个询问,只有一种方案 4→1→3→54 \rarr 1 \rarr 3 \rarr 5 可以使航线数最少为 33,所得金币为 20+30+70+60=18020+30+70+60=180。

样例解释 2

笑死,连航线都没有。

数据范围与约定

对于 100%100\% 的数据,2≤n≤300,1≤ai≤109,1≤q≤n(n−1),1≤ui,vi≤n2\le n\le 300,1\le a_i\le 10^9,1\le q\le n(n-1),1\le u_i,v_i\le n,且询问中的 ui,viu_i,v_i 各不相同。

翻译者:not_Rick_Astley

输入输出样例

  • 输入#1

    5
    30 50 70 20 60
    NYYNN
    NNYNN
    NNNYY
    YNNNN
    YNNNN
    3
    1 3
    3 1
    4 5

    输出#1

    1 100
    2 160
    3 180
  • 输入#2

    2
    100 100
    NN
    NN
    1
    1 2

    输出#2

    Impossible

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

首页