【最小生成树prim】给水

所以到底读“给予”的“给”,还是平时用的“给”。。。


FJ决定给N(1<=N<=300)个草地给水,草地编号为1到N。他可以在该草地处建立一口井,也可以建立管道从别的草地引水进来,在第i块草地处挖一口井需要花费W_i(1<=W_i<=100,000),连接井i和井j的管道需要花费P_ij(1<=P_ij<=100,000,P_ij=P_ji;P_ii=0)。
计算最少需要花费多少才能保证每个草地都有水。

Input

第一行,一个整数N
第2到N+1行,第i+1行输入W_i
第N+2到2N+1行,每行N个空格隔开的整数,表示P_ij

Output

输出最少花费。

Sample Input

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

Sample Output

9


最小生成树之前是学过的。然后看到这题第一感觉就是最小生成树。但是使此节点生效的话需要一个“启动值”,然后就感觉有点麻烦。我试想过将路径加上初始值,但是貌似不可行。直到评讲时——
某大佬:我们可以加一个0节点,使0号节点到其它节点…
然后我瞬间想到了——
某大佬:的距离为初始值。。。
然后这样就方便多了嗯。
直接最小生成树走起~但是依然不想优化。还有很多题等着。。。

#include<cstdio>
int n,f[301][301],k,ans;
bool b[301];
int main
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值