题目:

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

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
?
题意描述:
输入道路条数和城市数目
计算并输出使任意两个村庄直接或者间接连通的最短距离
解题思路:
属于最小生成树问题,按照数据格式,使用Kruskal算法即可。
代码实现:
 #include<stdio.h>
#include<string.h>
int e[][],book[],dis[];
const int inf=;
int main()
{
int n,m,min,t1,t2,t3,i,j,c,sum,k;
while(scanf("%d%d",&m,&n), m != )//m为道路条数,n为村庄个数
{
memset(e,,sizeof(e));
for(i=;i<=n;i++)//初始化邻接矩阵
{
for(j=;j<=n;j++){
if(i==j)
e[i][j]=;
else
e[i][j]=inf;
}
}
for(i=;i<=m;i++)
{
scanf("%d%d%d",&t1,&t2,&t3);
e[t1][t2]=t3;
e[t2][t1]=t3;
}
for(i=;i<=n;i++)//初始化dis,存储距离生成树(仅有1顶点)到每个非树顶点的距离
dis[i]=e[][i];
memset(book,,sizeof(book));
book[]=;
c=;
sum=;//sum初始化,当只有一个正确样例时注意多复制一下 while(c < n)//直到找到n-1条边
{
min=inf;
for(j=,i=;i<=n;i++)
{//遍历每个定点,找到某个顶点没有被用过而且距离生成树又最近
if(book[i]== && dis[i] < min)
{
min=dis[i];
j=i;
}
}
book[j]=;//标记使用并计数,将其累加到sum上
c++;
sum += dis[j]; for(k=;k<=n;k++)
{//最后遍历所有边,以j为中间点更新dis数组中生成树到每一个非树顶点的距离
if(book[k]== && dis[k] > e[j][k])
dis[k]=e[j][k];
}
} for(i=;i<=n;i++){
if(!book[i])
break;
}
if(i == n+)
printf("%d\n",sum);
else
printf("?\n");
}
return ;
}

易错分析:

1、注意数据输入,结点数在前还是边数在前

2、当只有一个样例时,多出几组测试样例,想几个样例的时间跟罚时20分钟比起来要少的多,另外不影响情绪

HDU 1863 畅通工程(Prim算法求解MST)的更多相关文章

  1. hdu 1863 畅通工程 (prim)

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

  2. hdu 1863 畅通工程 (并查集+最小生成树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 畅通工程 Time Limit: 1000/1000 MS (Java/Others)    M ...

  3. hdu 1863 - 畅通工程(MST)

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

  4. HDU 1863 畅通工程 克鲁斯卡尔算法

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

  5. HDU 1863 畅通工程(Prim,Kruskal,邻接表模板)

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

  6. <hdu - 1863> 畅通工程 并查集和最小生成树问题

    本题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863  Problem Description: 省政府“畅通工程”的目标是使全省任何两个村庄间都可以 ...

  7. HDU 1863 畅通工程

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

  8. HDU-1233 还是畅通工程 (prim 算法求最小生成树)

    prim 算法求最小生成树 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  9. HDU - 1863 畅通工程(最小生成树)

    d.m个村庄,n条路,计算出所有村庄畅通需要的最低成本. s.最小生成树 c.Prim算法:cost[a][b]和cost[b][a]都得赋值. /* Prim算法 Prim求MST 耗费矩阵cost ...

随机推荐

  1. WPF选择文件、文件夹和另存为对话框

    WPF提供了选择文件对话框,但并没有提供选择文件夹的对话框. OpenFileDialog类存在于PresentationFramework.dll程序集. public string SelectF ...

  2. T-SQL判断是否存在表、临时表

    利用SQL SERVER的系统函数 object_id() 可以判断是否存在表.临时表, object_id() 的作用是返回架构范围内对象的数据库对象标识.(即返回系统视图  sys.objects ...

  3. Spring boot创建定时任务

    基于spring boot的应用创建定时任务不要太简单,给一个类加上@Configuration @EnableScheduling注解,然后给该类需要定时执行的方法加上@Scheduled(cron ...

  4. 1047 行 MySQL 详细学习笔记

    https://blog.csdn.net/baidu_25310663/article/details/86517610 Windows服务   -- 启动MySQL   net start mys ...

  5. C++实现-特征码遍历

    #include <stdio.h> #include <stdlib.h> #include <windows.h> union Base { DWORD add ...

  6. 如何查看linux服务器的版本和配置信息

    linux下看配置,可没有windows那么直观.你只能一个一个查看. 一:cpu[root@srv /]# more /proc/cpuinfo | grep "modelname&quo ...

  7. ReentrantLock总体概括

    一.锁的实现原理: JAVA concurrent包下面的锁是通过AbstractQueuedSynchronizer内的Node类下面的state属性来实现的,并且锁的可重入属性也是通过state实 ...

  8. POJ 1101

    #include <iostream> #include <string> #define MAXN 78 #define min _min #define inf 12345 ...

  9. Android UiAutomator UiDevice API

    UiDevice为单例模式 1.获取设备 static UiDevice getInstance() This method is deprecated. Should use getInstance ...

  10. 微信小程序web-view(webview) 嵌套H5页面 唤起微信支付的实现方案

    场景:小程序页面有一个web-view组件,组件嵌套的H5页面,要唤起微信支付. 先讲一下我的项目,首先我是自己开发的一个H5触屏版的商城系统,里面含有购物车,订单支付等功能.然后刚开始,我们公众号里 ...