【NOIP2013模拟】四叶草魔杖 题解

本文介绍了NOIP2013模拟题目的解题思路,题目涉及能量平衡的宝石和四叶草魔杖。通过构建宝石之间的能量传递网络,求解使所有宝石能量相同的最小代价。利用最小生成树算法解决该问题,给出了解题过程和代码实现。
摘要由CSDN通过智能技术生成

【NOIP2013模拟】四叶草魔杖

Description

魔杖护法Freda融合了四件武器,于是魔杖顶端缓缓地生出了一棵四叶草,四片叶子焕发着淡淡的七色光。圣剑护法rainbow取出了一个圆盘,圆盘上镶嵌着N颗宝石,编号为0~N-1。第i颗宝石的能量是Ai。如果Ai>0,表示这颗宝石能量过高,需要把Ai的能量传给其他宝石;如果Ai<0,表示这颗宝石的能量过低,需要从其他宝石处获取-Ai的能量。保证sigma(Ai)=0。只有当所有宝石的能量均相同时,把四叶草魔杖插入圆盘中央,才能开启超自然之界的通道。
不过,只有M对宝石之间可以互相传递能量,其中第i对宝石之间无论传递多少能量,都要花费Ti的代价。探险队员们想知道,最少需要花费多少代价才能使所有宝石的能量都相同?

Input

第一行两个整数N、M。
第二行N个整数Ai。
接下来M行每行三个整数pi,qi,Ti,表示在编号pi和qi的宝石之间传递能量需要花费Ti的代价。数据保证每对pi、qi最多出现一次。

Output

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

Sample Input

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

Sample Output

30

Data Constraint

对于50%的数据,2<=N<=8。
对于100%的数据,2<=N<16,0<=M<=N*(N-1)/2,0<=pi,qi<N,-1000<=Ai<=1000,0<=Ti<=1000,sigma(Ai)=0。

题解

看到数据范围,果断状压,可惜考场思路假了(一天一道状压DP啊)
感性地YY一下题目,发现这题可能跟最小生成树有点儿关系,于是我们可以顺着这个思路来想
先设状态,设 f [ s ] 表 示 f[s]表示 f[s]使状态 s s s中为1的点中全部传递成0需要的最小代价
然后我们考虑转移,实际上我们可以枚举两个集合状态 s s s s ′ s' s来进行合并转移
我们先将每一个状态 s s s所需要的代价算出来,不难发现其实就是这个连通块的最小生成树的边权之和
然后转移方程就一目了然了:
f [ s ∣ s ′ ] = m i n ( f [ s ∣ s ′ ] , f [ s ] + 形 成 状 态 s ′ 所 需 的 代 价 ) f[s|s']=min(f[s|s'],f[s]+形成状态s'所需的代价) f[ss

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值