HDU 1863 畅通工程(Prim算法求解MST)
题目:
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)的更多相关文章
- hdu 1863 畅通工程 (prim)
畅通工程Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- hdu 1863 畅通工程 (并查集+最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 畅通工程 Time Limit: 1000/1000 MS (Java/Others) M ...
- hdu 1863 - 畅通工程(MST)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 1863 畅通工程 克鲁斯卡尔算法
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 1863 畅通工程(Prim,Kruskal,邻接表模板)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- <hdu - 1863> 畅通工程 并查集和最小生成树问题
本题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 Problem Description: 省政府“畅通工程”的目标是使全省任何两个村庄间都可以 ...
- HDU 1863 畅通工程
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
- HDU-1233 还是畅通工程 (prim 算法求最小生成树)
prim 算法求最小生成树 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- HDU - 1863 畅通工程(最小生成树)
d.m个村庄,n条路,计算出所有村庄畅通需要的最低成本. s.最小生成树 c.Prim算法:cost[a][b]和cost[b][a]都得赋值. /* Prim算法 Prim求MST 耗费矩阵cost ...
随机推荐
- .net core 滑动+点击汉字验证码
用 .net core 写的 滑动+点击汉字的验证码,代码比较简单就不做说明了. github地址 https://github.com/wangchengqun/NetCoreVerificat ...
- .Net Core + NGINX跳转登录时端口丢失
使用.Net Core + NGINX部署到服务器的时候,如果端口不是使用默认的80端口,在跳转到登录页面时,URL中的端口丢失. NGINX的配置如下: server { listen ; loca ...
- nginx安装和遇到的问题
nginx安装步骤和遇到的问题 tar -xvf nginx-.tar.gz cd nginx- ./configrue make make install 在configure中可能遇到的问题: ( ...
- MyCat - 背景篇(1)
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. SQL与NoSQL 目前,对于互联网海量数据的存储以及处理,按使用场景,分为OLTP(联机事务处理,比如即时 ...
- OVS 内核KEY值提取及匹配流表代码分析
原文链接:http://ry0117.com/2016/12/24/OVS内核KEY值提取及匹配流表代码分析/ 当开启OVS后,创建datapath类型为system的网桥并他添加相关接口,OVS网桥 ...
- Django(图书管理系统1)
day63 内容回顾 1. 单表的增删改查 1. 删和改 1. GET请求 URL传值 1. 格式 ...
- zoj4016 Mergeable Stack
题意:对n个栈,有q次操作.每个操作可能为三种情况中的一种:1.将v插入到s栈的顶端:2.输出s栈的栈顶(若栈为空则输出empty):3.将栈t插入到栈s的栈顶. 开始考虑到指针可能会mle,用数组模 ...
- Bind读取配置到C#实例
1.创建一个空的ASP.NET Core Web 应用程序 2.程序包管理控制台执行Install-Package Microsoft.AspNetCore -Version 2.0.1 3.创建js ...
- Python sys os getpass 包的导入
块的导入 导入一个py文件,解释器解释该py文件 导入一个包,解释器解释该包下的 init.py 文件 import module 直接导入模块 from module.xx.xx import xx ...
- VmWare扩展硬盘分区
扩展硬盘 对硬盘进行分区 () 查看现有的硬盘分区情况 [mysql@china ~]$ df -h Filesystem Size Used Avail Use% Mounted on /dev/m ...