AT_abc286_e.[ABC286E] Souvenir
普及+/提高
通过率:0%
AC君温馨提醒
该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
从前有 n 座岛,每个岛上有 ai 个金币,各个岛间有若干条单向航线相连。
你从某个岛开始旅行,经过一个岛(包括最开始所在的岛)就会拿走上面的金币。
现在问你 q 个问题:从岛 ui 旅行到岛 vi,最少要走几条航线,以及恰好走这么多条航线最多能获得多少金币。如果根本无法到达 vi,输出 Impossible。
询问之间相互独立。
输入格式
输入第一行一个整数 n 表示岛的数量。
接下来一行 n 个整数表示每个岛上的金币数。
接下来 n 行每行一个长为 n 的字符串,第 i 行字符串的第 j 个字符若为 Y 则表示岛 i 和 j 间有单向航线,否则表示没有。
接下来一行一个整数 q 表示询问次数。
最后 q 行每行两个整数 ui,vi,询问你从岛 ui 旅行到岛 vi 最少要走几条航线,以及恰好走这么多条航线最多能获得多少金币。
输出格式
对于每个询问输出一行:
- 若 ui 不能到达 vi,输出
Impossible; - 否则,输出从岛 ui 旅行到岛 vi 最少要走几条航线,以及恰好走这么多条航线最多能获得多少金币。
样例解释 1
这些岛的结构如下:

- 对于第 1 个询问,因为岛 1 有一条航线通往岛 3,显然最少航线为 1 条,此时能拿到岛 1 和岛 3 上的金币共 30+70=100 个。
- 对于第 2 个询问,可以证明最少航线为 2 条,有两种方案 3→4→1 和 3→5→1,总金币分别为 70+20+30=120 和 70+60+30=160,故最多金币为 160。
- 对于第 3 个询问,只有一种方案 4→1→3→5 可以使航线数最少为 3,所得金币为 20+30+70+60=180。
样例解释 2
笑死,连航线都没有。
数据范围与约定
对于 100% 的数据,2≤n≤300,1≤ai≤109,1≤q≤n(n−1),1≤ui,vi≤n,且询问中的 ui,vi 各不相同。
翻译者: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测评打分。不知道怎么写?