畅通工程

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 10637    Accepted Submission(s): 4240

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算法写的,克鲁斯卡尔算法我也会在以后补上,毕竟两个储存方式不一样,优缺点也不一样,要灵活运用。
#include<stdio.h>
#include<iostream>
#include <algorithm>
#include<string.h>
#include<vector>
#include<math.h>
#include<queue>
#include<set>
#define LL long long
#define INF 0x3f3f3f3f
using namespace std;
int KGCD(int a,int b){if(a==0)return b;if(b==0)return a;if(~a&1){ if(b&1) return KGCD(a>>1,b);else return KGCD(a>>1,b>>1) <<1; } if(~b & 1)  return KGCD(a, b>>1);  if(a > b) return KGCD((a-b)>>1, b);return KGCD((b-a)>>1, a);}
int LCM(int a,int b){ return a/KGCD(a,b)*b; }
int dir[5][2]={0,1,0,-1,1,0,-1,0};
using namespace std;
int map[110][110];
int p(int x)
{int lowcost[110];//记录的是到每个点的最小权值int mas[110];//记录每个点是那个点过去的int sum=0;memset(lowcost,0,sizeof(lowcost));memset(mas,0,sizeof(mas));for(int i=2;i<=x;i++) //开始默认第一个为初始点{ lowcost[i]=map[1][i];mas[i]=1;        //所有的起点都默认1 }mas[1]=0;for(int i=2;i<=x;i++)//需要扫描的次数 {int min=INF;int minid=0;for(int j=2;j<=x;j++){if(lowcost[j]<min && lowcost[j]!=0){min=lowcost[j];//刷新最小值 minid=j;       //标记下最小的那个点是哪里 }} if(min==INF)//判断下  是否可以找到 如果找不到就退出return 0;sum=sum+min;lowcost[minid]=0;for(int j=2;j<=x;j++)//借助minid 点 搜索所有它可以到达的点 然后减少下范围。{if(map[minid][j] < lowcost[j] && map[minid][j]!=INF){lowcost[j]=map[minid][j];mas[j]=minid;}} }return sum;
}
int main()
{int n,m,x,y,cost;while(scanf("%d%d",&n,&m)!=EOF){memset(map,0,sizeof(map));if(n==0)break;for(int i=1;i<=m;i++)//初始化图 {for(int j=1;j<=m;j++){map[i][j]=INF;}}for(int i=0;i<n;i++)//开始构建图 {scanf("%d%d%d",&x,&y,&cost);map[x][y]=map[y][x]=cost;}cost=p(m);if(cost)printf("%d\n",cost);elseprintf("?\n"); }return 0;
} 


prim算法详细介绍:https://www.61mon.com/index.php/archives/199/
http://blog.csdn.net/passer__/article/details/78301055
我感觉这个博客写的很清晰,但是只是给的思想,应该根据题目灵活应变。
 

HDU 1863畅通工程(最小生成树)(prim算法)相关推荐

  1. HDOJ 1863畅通工程(最小生成树kruskal算法并查集实现)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1863 最小生成树kruskal算法:http://www.zhuoda.org/irini/78592.h ...

  2. HDU 1863 畅通工程 最小生成树

    思路: 比较典型的最小生成树的题目了..在这里用求最小生成树的经典算法K(Kruskal)算法和P(Prim)算法.我的 K 算法用的是结构体来存图,P 算法用的是邻接矩阵来存图,K算法的复杂度是O( ...

  3. HDU——1863 畅通工程(最小生成树问题)

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 题意:有m个村庄,还给出了n条道路的具体信息.问你能否使m个村庄畅通,且最小花费是多少? 解题思 ...

  4. HDU 1863 畅通工程

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  5. 畅通工程//最小生成树prim

    题目: 畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  6. hdu 1232 畅通工程 最小生成树 并查集

    1232的连接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 #include <iostream>#include <cstdio& ...

  7. [Java学习] 最小生成树——Prim算法

    文章目录 最小生成树 Prim算法流程 应用实例 求最小生成树 最小生成树 百度百科上对于最小生成树的定义是这样的:一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结 ...

  8. 最小生成树Prim算法Java版

    最小生成树Prim算法Java版 算法描述: 在一个加权连通图中,顶点集合V,边集合为E 任意选出一个点作为初始顶点,标记为visit,计算所有与之相连接的点的距离,选择距离最短的,标记visit. ...

  9. D-OJ刷题日记:使用邻接矩阵实现最小生成树Prim算法 题目编号:1135

    理解: [理解prim算法本质--让一棵小树逐渐长大] Prim算法:又称为加边法,即每次选择最小权值的边加入到生成树中,然后再更新权值,如此反复,保证每次最优来达到最优解. Prim算法生成树用的是 ...

最新文章

  1. 牛客--追债之旅 两种解法
  2. 面试官问我,使用Dubbo有没有遇到一些坑?我笑了。
  3. keras 导出onnx并使用
  4. oracle 临时表存在哪里_openGauss魔改PG?它能兼容Oracle的数据库表吗?
  5. 腾讯2019暑期实习生提前批CV岗笔试题
  6. 程序员一定要提升技术之外的能力
  7. 达摩院成立XG实验室!阿里官宣进军5G
  8. 试题14 回文数(详解)
  9. mysql 改变 执行计划_诡异的MySql执行计划的更改
  10. red_hat_enterprise_linux
  11. 算丰征途「SOPHON盘古无人驾驶系统」基本框架介绍
  12. Leecode:数组中的最长山脉
  13. android 当电脑屏幕,手机变身为电脑的第二屏幕?让你把手机当成电脑用!
  14. 【Practical】线性空间
  15. 更改会话语言oracle,alter session 修改的参数值在会话中如何回退
  16. PHP+python+nodejs+ springboot+vue 社区互助平台
  17. ARMv7和ARMv8架构比较
  18. 空气源热泵控制系统解决方案
  19. 【HDOJ】4210 Su-domino-ku
  20. python+django线上教学平台vue教育系统

热门文章

  1. 电容三点式振荡电路详解及Multisim实例仿真
  2. 外资银行将获准在华开展零售金融业务
  3. Boos直聘行业数据获取、json解析
  4. 数据结构:栈和队列(Stack Queue)【详解】
  5. php生成一组随机数_php如何生成随机数?(代码示例)
  6. python假设检验平均,利用python进行17种统计假设检验
  7. 网络创业8年 接下来这条路该怎么走?
  8. 如果不能深爱我会微笑离开
  9. 闲聊迟迟等不到货的Airpods
  10. Recordset对象属性(二)