#g7052. [GESP202312 七级] 商品交易

[GESP202312 七级] 商品交易

题目背景

市场上共有 N 种商品,编号从 0 至 N-1,其中第 i 种商品价值 v_i 元。共有 M 个商人,在第 j 个商人这里,可以用第 x_j 种商品交换商人手上的第 y_j 种商品。每个商人按商品价值交易:若 v[x]>v[y],他付给你 v[x]-v[y] 元;否则你付给他 v[y]-v[x] 元。此外每次交易还收取 1 元手续费。你现在拥有商品 a,希望通过一些交换获得商品 b。

题目描述

给定所有商品的价值和全部可交换关系,求从持有商品 a 到获得商品 b,最少要花费多少钱。最小花费也可能是负数,表示完成目标的同时还能赚到一些钱。如果无论如何都无法换到商品 b,输出 No solution。

输入格式

第一行四个整数 N, M, a, b。保证 0 ≤ a, b < N,a ≠ b。第二行 N 个正整数 v_0..v_{N-1},保证 1 ≤ v_i ≤ 10⁹。接下来 M 行每行两个整数 x_j, y_j,表示可以用第 x_j 种商品交换第 y_j 种商品,保证 0 ≤ x_j, y_j < N,x_j ≠ y_j。

输出格式

一行一个整数,表示最少的花费。如果无法换取商品 b,输出 No solution。

输入输出样例

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

样例 1:0→1 花费 2-1+1=2,1→2 花费 4-2+1=3,总花费 5。

3 3 0 2
100 2 4
0 1
1 2
0 2
-95

样例 2:直接 0→2 花费 4-100+1=-95。

4 4 3 0
1 2 3 4
1 0
0 1
3 2
2 3
No solution

样例 3:从 3 出发只能到达 2、3,无法到达 0,输出 No solution。

说明/提示

- 对于 30% 的测试点,N ≤ 10,M ≤ 20 - 对于 70% 的测试点,N ≤ 10³,M ≤ 10⁴ - 对于 100% 的测试点,N ≤ 10⁵,M ≤ 2×10⁵ - 答案可能为负数,也可能超出 int 范围,请使用 64 位整数