[USACO08OCT]打井Watering Hole——[kruskal]

博客介绍了如何解决USACO08OCT的打井Watering Hole问题,利用Kruskal算法寻找最小生成树,并提供了样例输入输出及题意分析,强调在处理数据时要注意避免不必要的复杂数据结构。
摘要由CSDN通过智能技术生成

【题目描述】
农民John 决定将水引入到他的n(1<=n<=300)个牧场。他准备通过挖若

干井,并在各块田中修筑水道来连通各块田地以供水。在第i 号田中挖一口井需要花费W_i(1<=W_i<=100,000)元。连接i 号田与j 号田需要P_ij (1 <= P_ij <= 100,000 , P_ji=P_ij)元。

请求出农民John 需要为连通整个牧场的每一块田地所需要的钱数。

【输入格式】
第1 行为一个整数n。

第2 到n+1 行每行一个整数,从上到下分别为W_1 到W_n。

第n+2 到2n+1 行为一个矩阵,表示需要的经费(P_ij)。

【输出格式】
只有一行,为一个整数,表示所需要的钱数。

【样例输入】
4
5
4
4
3
0 2 2 2
2 0 3 3
2 3 0 4
2 3 4 0

【样例输出】
9

【题意分析】
有一些点可以用来打井,还有许多边表示连接的费用,求一个最小生成树。

如果直接把给你的那些边求一个最小生成树,那么井就没有打(没有水源),那么怎么解决这个问题呢?既要有水源,给你的边又要求最小生成树,因为打井也是要费用的,是计入结果的,为了保持其必需性,有一个好方法:

把编号为i的井看成0-i这条边,权值为打井费用,然后求0-n节点的最小生成树。(原来为1-n节点)

跑最小生成树用Kruskal&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值