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 ...
随机推荐
- vue多选验证
vue select 多选 验证 <FormItem :prop="'formList.'+index+'.name'" label="姓名" :rule ...
- c#连接sql server数据库字符串
第一种方式 Data Source=数据库地址;Initial Catalog=数据库名称;User Id=数据库登录名;Password=数据库密码;[Integrated Security=SSP ...
- Spring Bean的生命周期、Spring MVC的工作流程、IOC,AOP
1.Spring Bean的生命周期? (1)构造方法实例化bean. (2)构造方法设置对象属性. (3)是否实现aware接口,三种接口(BeanNameAware,BeanFactoryAwar ...
- C++读取数量不定的数据
#include <iostream> using namespace std; int main(){ ,num=; while(cin >> num){//此表达式从标准输 ...
- log4j2和logback动态修改日志级别工具类
工作中,在排查线上问题时,有以下场景在不重新部署或重启服务的情况下,需要动态调整线上日志级别 1.线上有些日志打印过多干扰有用的日志,需要动态修改线上日志记录器的打印日志级别,调高一些日志级别,打印出 ...
- 题解 P3117 【[USACO15JAN]牛的矩形Cow Rectangles】
暴力什么的就算了,贪心他不香吗 这题其实如果分开想,就三种情况需要讨论:(由于不会发图,只能手打) 1) 5 . . . . . 4 . . . . . 3 . . . H . 2 . . G . . ...
- JavaSE--RMI初识
转自:http://blog.csdn.net/guyuealian/article/details/51992182 一.Java RMI机制: 远程方法调用RMI(Remote Me ...
- python如何在一个for循环中遍历多个列表
推荐使用python内置函数zip,它可以将x个y维列表变成一个zip对象,将zip对象拆包可以发现它变成了y个x维元组.我们还可以将这个对象变成一个元组或列表.如下所示: 如果是两个列表的zip,我 ...
- Velocity脚本入门教程
下面资料整理自网络 一.Velocity介绍 Velocity是Apache公司的开源产品,是一套基于Java语言的模板引擎,可以很灵活的将后台数据对象与模板文件结合在一起,说的直白一点,就是允许任何 ...
- opencv+tkinter制作HsvMaster(一)
这两天看opencv-python的HSV色彩空间,在写程序时发现用HSV来提取图像区域是件令人恶心的麻烦事.拿阈值分割做个对比,阈值最多也就一两个参数需要调整:但是HSV需要对三个通道调整上下限,也 ...