畅通工程(kruskal算法)
个人心得:日了狗,WR了俩个小时才发现是少了个vector清理,我也是醉了,不过后面还是对这个有了更好得了解,一是我得算法,而是学长改进
后的算法,改进后得算法还要判断所有村庄是否在连在一起,其实我觉得实必要性不大。
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。现请你编写程序,计算出全省畅通需要的最低成本。
行对应村庄间道路的成本,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间道路的成本(也是正整数)。为简单起见,村庄从1到M编号。当N为0时,全部输入结束,相应的结果不要输出。
1 2 1
1 3 2
2 3 4
1 3
2 3 2
0 100
?
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
const long long maxa=;
int n,m;
struct village
{
int v;
int e;
int w;
village(int x,int y,int z){
v=x,e=y,w=z;
}
village(){}
bool operator <(const village &V)const
{
return w<V.w; } };
vector<village> V;
int book[];
void init()
{
for(int i=;i<=m;i++)
book[i]=i; }
int getx(int x)
{
if(book[x]!=x)
book[x]=getx(book[x]);
return book[x];
}
void mergexy(int x,int y)
{
book[y]=x;
}
int main()
{
while(cin>>n>>m)
{
V.clear();
if(n==) break;
init();
int t=n;
while(t--)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
village a(x,y,z);
V.push_back(a);
}
sort(V.begin(),V.end());
int number=;
long long sum=;
for(int i=;i<V.size();i++)
{
if(getx(V[i].v)!=getx(V[i].e)){
mergexy(getx(V[i].v),getx(V[i].e));
number++;
sum+=V[i].w; }
if(number==m-) break;
}
if(number==m-) cout<<sum<<endl;
else cout<<"?"<<endl; }
return ;
}
畅通工程(kruskal算法)的更多相关文章
- HDU-1233 还是畅通工程 (prim 算法求最小生成树)
prim 算法求最小生成树 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- hdu-1863-畅通工程(kruskal算法模板)
题目链接 /* Name:hdu-1863-畅通工程 Copyright: Author: Date: 2018/4/18 10:19:03 Description: kruskal算法 */ #i ...
- HDU 1863 畅通工程 -Kruskal模版
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- hdu 1863 畅通工程(Kruskal+并查集)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU 1863 畅通工程(Kruskal)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU 1233 还是畅通工程(Kruskal)
还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- HDU1875——畅通工程再续(最小生成树:Kruskal算法)
畅通工程再续 Description相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当 ...
- HDU 1233 还是畅通工程(Kruskal算法)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1233 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) ...
- hdu 1233 还是畅通工程 最小生成树(prim算法 + kruskal算法)
还是畅通工程 Time Limit: 4000/2 ...
- 最小生成树算法 prim kruskal两种算法实现 HDU-1863 畅通工程
最小生成树 通俗解释:一个连通图,可将这个连通图删减任意条边,仍然保持连通图的状态并且所有边权值加起来的总和使其达到最小.这就是最小生成树 可以参考下图,便于理解 原来的图: 最小生成树(蓝色线): ...
随机推荐
- UI控件之UIImageView
UIImageView:图像视图,用于在应用程序中显示图片 UIImage:是将图片文件转换为程序中的图片对象 UIImageView是UIImage的载体 方法一:用此方法创建图片对象,会将图片ca ...
- $UML统一建模语言简介
(一)UML概述 1.面向对象软件开发的过程: (1)OOA(面向对象分析):建立分析模型并文档化. (2)OOD(面向对象设计):用面向对象思想对OOA的结果进行细化,得出设计模型. (3)OOP( ...
- 【HackerRank】Lonely Integer
There are N integers in an array A. All but one integer occur in pairs. Your task is to find out the ...
- BCM 交换机开发
转:http://blog.chinaunix.net/uid-23782786-id-3839602.html 前言: 最近搞这玩样,真是折腾,网上的资料都是片段,而且很少.折腾了4. ...
- python的计算保留小数
1.要使得算术运算的结果有小数,则运算的对象至少有一个是float型的. 2.控制小数的位数:字符串格式化 格式:需要进行格式化的字符串%插入对象 需要进行格式化的字符串中带有一个或多个嵌入的转换目标 ...
- hadoop程序在本地模式调试作业
1.首先下载cygwin,例如安装在该目录下,D:\Program Files\cygwin\ 2.copy linux上的jar包到D:\Program Files\cygwin\home\lib ...
- php面向对象之克隆对象
在前面的PHP面向对象之对象和引用,我们试图以"$b=$a"的方式复制对象以传递对象的值(内容),结果却是传递对象的地址,在结尾为了解决复制对象这个问题,提到了克隆的方法.接下来讲 ...
- IDEA使用前的各种基本设置(转)
先搞个链接,以后自己慢慢总结:传送门
- Eclipse与Tomcat的集成(无插件)
1.下载Eclipse(https://www.eclipse.org/downloads/)和Tomcat(http://tomcat.apache.org/),具体的安装略: 2.打开Eclips ...
- CCNA 课程 五
VLSM (可变长子网掩码)也就是子网的划分过程 子网掩码和ip地址相与得到的是IP地址的网络地址(0&1 == 0 : 1&1 == 1) 简单来说就是 IP地址 和 子网掩码 上下 ...