
【最小生成树prim】给水
发布日期:2021-05-07 22:49:35
浏览次数:21
分类:精选文章
本文共 1002 字,大约阅读时间需要 3 分钟。
所以到底读“给予”的“给”,还是平时用的“给”。。。
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_ijOutput
输出最少花费。
Sample Input
4
5 4 4 3 0 2 2 2 2 0 3 3 2 3 0 4 2 3 4 0Sample Output
9
最小生成树之前是学过的。然后看到这题第一感觉就是最小生成树。但是使此节点生效的话需要一个“启动值”,然后就感觉有点麻烦。我试想过将路径加上初始值,但是貌似不可行。直到评讲时——
某大佬:我们可以加一个0节点,使0号节点到其它节点… 然后我瞬间想到了—— 某大佬:的距离为初始值。。。 然后这样就方便多了嗯。 直接最小生成树走起~但是依然不想优化。还有很多题等着。。。#includeint n,f[301][301],k,ans;bool b[301];int main(){ freopen("water.in","r",stdin); freopen("water.out","w",stdout); scanf("%d",&n); for(int i=1;i<=n;++i) //读入距离 scanf("%d",&f[0][i]); for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) scanf("%d",&f[i][j]); k=n;b[0]=1; while(k--){ //处理n次,将n个节点全都接上水 int min=100000,d; for(int i=0;i<=n;++i) //寻找一个已接上水的节点 if(b[i]==1) for(int j=1;j<=n;++j) //寻找一个没接上水的节点 if(b[j]==0&&f[i][j]
发表评论
最新留言
很好
[***.229.124.182]2025年04月13日 16时11分46秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
mybatis #{}和${}区别
2021-05-09
Java Objects工具类重点方法使用
2021-05-09
Java内存模型(JMM)
2021-05-09
AQS相关
2021-05-09
abp(net core)+easyui+efcore实现仓储管理系统——多语言(十)
2021-05-09
WCF学习之旅—第三个示例之一(二十七)
2021-05-09
java ThreadPoolExecutor初探
2021-05-09
Markdown进阶
2021-05-09
快速指数算法
2021-05-09
python去除字符串中的特殊字符(爬虫存储数据时会遇到不能作为文件名的字符串)
2021-05-09
PHP将网址快捷方式保存到桌面
2021-05-09
SpringCloud微服务(03):Hystrix组件,实现服务熔断
2021-05-09
Spring 框架基础(01):核心组件总结,基础环境搭建
2021-05-09
JavaEE基础(02):Servlet核心API用法详解
2021-05-09
SpringBoot2 整合Nacos组件,环境搭建和入门案例详解
2021-05-09
结构与算法(03):单向链表和双向链表
2021-05-09
Hadoop框架:MapReduce基本原理和入门案例
2021-05-09