HDU1233 还是畅通工程
题目:
Problem Description
Input
当N为0时,输入结束,该用例不被处理。
Output
Sample Input
Sample Output
Hint
Huge input, scanf is recommended.
思路:
- 用结构体捆绑两个村庄和其间的距离
- 使用并查集和最小生成树,此处采用kruskal算法求最小生成树.
- 用最小生成树时需要利用STL容器中的sort排序,而排序又需要用到比较函数cmp
代码:
#include <iostream>
#include <algorithm>
#define MAXN 99*50
using namespace std; int pre[]; //存储当前节点的前驱结点
int n, m; struct node{ //结构体存储边
int begin;
int end;
int len;
}s[MAXN]; bool cmp(node a, node b)
{
return a.len < b.len; //边小的排前面
} void init(int n) //初始化成独立节点
{
for(int i = ; i <= n; i++)
pre[i] = i;
} int find(int x) //寻找当前结点的根节点
{
while(x != pre[x])
x = pre[x]; return x;
} void merge(int fx, int fy) //归并两个不同根节点的结点
{
if(fx != fy)
pre[fx] = fy;
} int kruskal()
{
int minlen = ;
sort(s, s + m, cmp); //让边从小到大排序
for(int i = ; i < m; i++)
{
int fx = find(s[i].begin);
int fy = find(s[i].end);
if(fx != fy)
{
merge(fx, fy);
minlen += s[i].len; //归并后求最小路径和
}
}
return minlen;
} int main()
{
while(scanf("%d", &n) != EOF && n)
{
init(n);
m = n * (n - ) / ;
for(int i = ; i < m; i++)
{
scanf("%d%d%d", &s[i].begin, &s[i].end, &s[i].len);
}
printf("%d\n", kruskal());
}
return ;
}
总结:
同根节点的边结点不计入,否则会构成回路。
HDU1233 还是畅通工程的更多相关文章
- HDU-1233 还是畅通工程
Problem Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能 ...
- HDU-1233 还是畅通工程 (prim 算法求最小生成树)
prim 算法求最小生成树 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- HDU1233 还是畅通工程 2017-04-12 19:49 64人阅读 评论(0) 收藏
还是畅通工程 Time Limit : 4000/2000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submis ...
- hdu1233 继续畅通工程 (最小生成树——并查集)
还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 最小生成树: HDU1233还是畅通工程
还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- hdu1233还是畅通工程
还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- HDU1233 还是畅通工程【最小生成树】
题意: 求出连接各个村庄最小的公路总长度,把最小公路总长度求出来. 思路: 最小生成树原理,带入数据求得. 代码: prim: #include<iostream> #include< ...
- hdu1233 还是畅通工程 最小生成树
给出修建边的边权,求连通所有点的最小花费 最小生成树裸题 #include<stdio.h> #include<string.h> #include<algorithm& ...
- hdu-1233 还是畅通工程---MST模板
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1233 题目大意: 求MST最小生成树 解题思路: Prim算法直接套即可 #include<b ...
随机推荐
- pc页面在移动端浏览时部分字体放大,与pc字体大小不一致(Font Boosting)
最近做一个页面时,需要pc的页面在移动端浏览时保持pc的样式缩小.但是发现部分文字被放大了.看上去特别诡异.如下图 绿框是PC端查看时的正常样式,红框是移动端看的字体放大的诡异样式 是什么原因呢? 后 ...
- memset的常见用法
头文件 <cstring> 描述 因为memset函数按照字节填充,所以一般memset只能用来填充char型数组 ------------------------------------ ...
- linux虚拟机安装oracle全过程(一)
起源:为方便系统迁移,导致的不必要的重装软件.故在虚拟机中搭建oracle数据库以及weblogic服务器(所有使用软件及资源链接附在结尾处) 1.安装虚拟机: 1.1.安装vmware 11破解版. ...
- spring学习之第一个spring程序
spring的入门程序 1.在Eclipse中创建Java项目,并将spring的四个核心包和依赖包添加到src里,发布到类路劲下,项目如图所示: 2.UserDao程序如下: package com ...
- 吴裕雄--天生自然 PHP开发学习:MySQL子句
<?php $con=mysqli_connect("localhost","username","password","d ...
- PAT Advanced 1033 To Fill or Not to Fill (25) [贪⼼算法]
题目 With highways available, driving a car from Hangzhou to any other city is easy. But since the tan ...
- echars 柱状图点击事件
drawlineCRK() { let _this = this; ///绘制echarts 柱状图 let mycharts = this.$echarts.i ...
- Kafka及周边深度了解
之前介绍了使用官方脚本自动化启动一个Fabric网络,并且所有的证书都是通过官方的命令行工具cryptogen直接生成网络中的所有节点的证书.在开发环境可以这么简单进行,但是生成环境下还是需要我们自定 ...
- Spring加载xml配置文件的方式
梳理Spring的流程 xml是最常见的spring 应用系统配置源.Spring中的几种容器都支持使用xml装配bean,包括: XmlBeanFactory,ClassPathXmlApplica ...
- 二十八、rsync同步工具深入
1.将rsync服务加入到自启动文件rc.local echo "/usr/bin/rsync --daemon" >>/etc/rc.local tail -l rc ...