博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1863 prim算法
阅读量:5870 次
发布时间:2019-06-19

本文共 1584 字,大约阅读时间需要 5 分钟。

***************************************第二个博客******************************************
相信自己
就算最后不成功也会有进步
***************************************第二个博客******************************************
畅通工程
题目地址在这:

Problem Description

省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评
估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,计算出全省畅通需要的最低成本。

Input

测试输入包含若干测试用例。每个测试用例的第1行给出评估的道路条数 N、村庄数目M ( <100 );随后的 N
行对应村庄间道路的成本,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间道路的成本(也是正整数)。为简单起见,村庄从1到M编
号。当N为0时,全部输入结束,相应的结果不要输出。

Output

对每个测试用例,在1行里输出全省畅通需要的最低成本。若统计数据不足以保证畅通,则输出“?”。

Sample Input

3 3
1 2 1
1 3 2
2 3 4
1 3
2 3 2
0 100

Sample Output

3
?
赤裸裸的最小生成树,我这里使用了Prim算法。

.简单证明prim算法

反证法:假设prim生成的不是最小生成树

1).设prim生成的树为G0

2).假设存在Gmin使得cost(Gmin)<cost(G0)   则在Gmin中存在<u,v>不属于G0

3).将<u,v>加入G0中可得一个环,且<u,v>不是该环的最长边(这是因为<u,v>∈Gmin)

4).这与prim每次生成最短边矛盾

5).故假设不成立,命题得证.

 

 

 

#include
#define maxx 100000000using namespace std;int dis[105][105];//两点之间的距离int m,n;int prim()//prim作为函数{ int m[105],vis[105],ans=0; int minn,x; for(int i=1;i<=n;i++) m[i]=dis[1][i],vis[i]=0; vis[1]=1; while(1) { x=0; minn=INT_MAX; for(int i=1;i<=n;i++) { if(vis[i]==0&&m[i]
>m) { if(m==0) break; cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { if(i==j) dis[i][j]=0; else dis[i][j]=maxx; } for(int i=1;i<=m;i++) { int x,y,cost; cin>>x>>y>>cost; if(cost

 

转载于:https://www.cnblogs.com/woxihuanni/p/luoli.html

你可能感兴趣的文章
emma的几个不足之处
查看>>
Java工具类——UUIDUtils
查看>>
使用Node搭建reactSSR服务端渲染架构
查看>>
文件缓存
查看>>
转 博弈类题目小结(hdu,poj,zoj)
查看>>
Java NIO学习笔记八 Pipe
查看>>
远程协助
查看>>
Scrum实施日记 - 一切从零开始
查看>>
关于存储过程实例
查看>>
配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler” 解决办法...
查看>>
AIX 7.1 install python
查看>>
PHP盛宴——经常使用函数集锦
查看>>
重写 Ext.form.field 扩展功能
查看>>
Linux下的搜索查找命令的详解(locate)
查看>>
福利丨所有AI安全的讲座里,这可能是最实用的一场
查看>>
开发完第一版前端性能监控系统后的总结(无代码)
查看>>
Python多版本情况下四种快速进入交互式命令行的操作技巧
查看>>
MySQL查询优化
查看>>
【Redis源码分析】如何在Redis中查找大key
查看>>
northropgrumman
查看>>