HDU1863_畅通project【Prim】【并查集】
Problem Description
省政府“畅通project”的目标是使全省不论什么两个村庄间都能够实现公路交通(但不一定有直接的公路相连,仅仅要能间接通过公路可达就可以)。
经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编敲代码,计算出全省畅通须要的最低成本。
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
?
Source
浙大计算机研究生复试上机考试-2007年
题目大意:给你M个村庄、N条路,即N条路所连接的两个村庄即路程。
问是否能各个村庄都能有路达到,若不通。则输出'?',若通,则计算出连接
全部村庄最小的路程和
思路:先用并查集推断是否能全部村庄。
把有路连接的村庄并到一个集合里。
最后,若仅仅有一个集合。则全部村庄都能连接。若有两个以上,则肯定有
村庄不能到达。
然后用Prim算法计算出图的最小生成树。
#include<stdio.h>
#include<string.h> int N,M;
int map[110][110],vis[110],low[110];
int father[110]; int find(int a)
{
if(a != father[a])
father[a] = find(father[a]);
return father[a];
}
int prim()
{
int pos,res = 0;
memset(vis,0,sizeof(vis));
vis[1] = 1;
pos = 1;
for(int i = 1; i <= M; i++)
if(i != pos)
low[i] = map[pos][i]; for(int i = 1; i < M; i++)
{
int Min = 0xffffff0;
for(int j = 1; j <= M; j++)
{
if(vis[j] == 0 && Min > low[j])
{
Min = low[j];
pos = j;
}
}
res += Min;
vis[pos] = 1; for(int j = 1; j <= M; j++)
{
if(vis[j] == 0 && low[j] > map[pos][j])
low[j] = map[pos][j];
}
}
return res;
}
int main()
{ int posi,posj,cost;
while(~scanf("%d%d",&N,&M) && N!=0)
{
for(int i = 1; i <= M; i++)
father[i] = i;
for(int i = 1; i <= M; i++)
{
for(int j = 1; j <= M; j++)
{
map[i][j] = 0xffffff0;
}
}
while(N--)
{
scanf("%d%d%d",&posi,&posj,&cost);
map[posi][posj] = map[posj][posi] = cost;
int a = find(posi);
int b = find(posj);
if(a != b)
{
father[b] = a;
}
}
int a = find(1);
int flag = 1;
for(int i = 2; i <= M; i++)
{
if(find(i)!=a)
{
flag = 0;
}
} if(flag == 0)
printf("? \n");
else
{
int ans = prim();
printf("%d\n",ans);
} } return 0;
}
HDU1863_畅通project【Prim】【并查集】的更多相关文章
- 搭桥|codevs1002|最小生成树|Prim|并查集|Elena
1002 搭桥 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 有一矩形区域的城市中建筑了若干建筑物,如果某两个单元格有一个点 ...
- HDU 1232 畅通工程 (并查集)
某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可). ...
- HDU 1232:畅通工程(并查集模板)
畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- hdu 1232 畅通工程(并查集算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 畅通工程 Time Limit: 4000/2000 MS (Java/Others) M ...
- hdu畅通工程(并查集)
Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道 ...
- HDU1232 畅通工程---(经典并查集应用)
http://acm.hdu.edu.cn/showproblem.php?pid=1232 畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory ...
- hdu 1863 畅通工程(Kruskal+并查集)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 题解报告:hdu 1232 畅通工程(并查集)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了 ...
- HDU 1863 畅通工程 (并查集)
原题链接:畅通工程 题目分析:典型的并查集模版题,这里就不详细叙述了.对算法本身不太了解的可以参考这篇文章:并查集算法详解 代码如下: #include <iostream> #inclu ...
随机推荐
- 6 Javascript:函数
函数 函数是面向任务的. 当我们面临一个须要可问题的时候.往往无处下手.这时候.须要将问题分解为多个任务,从而逐一击破. 这里就须要函数的帮助. 语法 function Name() { Body() ...
- Cocos2d-x 动手实现游戏主循环
因为Cocos2d-x封装的非常好,所以对于非常多新手,他们仅仅知道先new一个场景,在场景上加入布景或精灵,然后用Director的runWithScene便能够执行游戏了.假设给一个精灵加个动作, ...
- web后台知识点整理
五.JEE 适用于创建server端的大型的软件服务系统 1. JEE : JAVA PLATFORM ENTERPRISE DEDITON 2.是一个规范集.技术集.框架集(API集) 一种技 ...
- Swift-UITextField用法
文本框的创建,如下几种方式: UITextBorderStyle.None:无边框 UITextBorderStyle.Line:直线边框 UITextBorderStyle.RoundedRect: ...
- Java类的根Object
一.Object类介绍 Object全名java.lang.Object,java.lang包在使用的时候无需显示导入,编译时由编译器自动导入.Object类是类层次结构的根,Java中所有的类从根本 ...
- UIimageView和UIimage的小区别
UIimageView 用来显示一张图片或者显示一组动画图片 UIimage 不是一个控件,只是一个普通的类,用来生成一张图片,只单纯的生成一张图片,图片只会被加载到内存,如果想要让用户 ...
- .NET Core 开发:永远的Hello Word
从.NET Core发布到现在已经很长一段时间了,园子里的各路大神也和它打的火热,本着与时俱进,啥火学啥的原则,我也开始了我的.NET Core学习之旅. 简介 .NET从2002年发行到现在,从呱呱 ...
- ROS常用知识指南
前言:介绍一些基础常用的知识. 一.标准单位 二.坐标表现方式 三.默认安装位置 通过apt-get安装的软件包, 默认安装位置为:/opt/ros/kinetic/share 四.软件包安装流程 4 ...
- jQuery中文学习站点
jQuery是一个快速.简单的Javascript library,它简化了HTML文件的traversing,事件处理.动画.Ajax互动,从而方便了网页制作的快速发展.jQuery是为改变你编写J ...
- c# CacheHelper缓存帮助类
一.开篇 主要功能:改善程序性能.服务器的响应速度,尤其是当数据的处理过程变得复杂以及访问量变大时,变得比较明显.有些数据并非时刻在发生变化,如果我们可以将一些变化不频繁的数据的最终计算结果(包括页面 ...