#212. 四叶草魔杖

四叶草魔杖

魔杖护法Freda融合了四件武器,于是魔杖顶端缓缓地生出了一棵四叶草,四片叶子幻发着淡淡的七色光。

圣剑护法rainbow取出了一个圆盘,圆盘上镶嵌着 N 颗宝石,编号为0~N-1。

第 i 颗宝石的能量是 A_iA\_i

如果A_i>0A\_i > 0,表示这颗宝石能量过高,需要把 A_iA\_i 的能量传给其它宝石;如果 A_i<0A\_i < 0,表示这颗宝石的能量过低,需要从其它宝石处获取 A_i-A\_i 的能量。

保证A_i=0\sum A\_i = 0

只有当所有宝石的能量均相同时,把四叶草魔杖插入圆盘中央,才能开启超自然之界的通道。

不过,只有 M 对宝石之间可以互相传递能量,其中第 i 对宝石之间无论传递多少能量,都要花费 T_iT\_i 的代价。

探险队员们想知道,最少需要花费多少代价才能使所有宝石的能量都相同?

输入格式

第一行两个整数N、M。

第二行 N 个整数A_iA\_i

接下来 M 行每行三个整数p_i,q_i,T_ip\_i,q\_i,T\_i,表示在编号为 p_ip\_iq_iq\_i 的宝石之间传递能量需要花费 T_iT\_i 的代价。

数据保证每对 p_iq_ip\_i、q\_i 最多出现一次。

输出格式

输出一个整数表示答案,无解输出Impossible。

数据范围

2N162 \le N \le 16,
0MN\*(N1)/20 \le M \le N\*(N-1)/2,
0p_i,q_i<N0 \le p\_i,q\_i < N,
1000A_i1000-1000 \le A\_i \le 1000,
0T_i10000 \le T\_i \le 1000

输入样例:

3 3
50 -20 -30
0 1 10
1 2 20
0 2 100

输出样例:

30

来源

  • 《算法竞赛进阶指南》
  • acwing 可能含有视频讲解