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 ...
随机推荐
- JAVA内存分配-通俗讲解
Java的内存分配上,主要分4个块: 一块是用来装代码的,就是编译的东西. 一块是用来装静态变量的,例如用static关键字的变量,例如字符串常量. 一块是stack,也就是栈,是用来装变量和引用类型 ...
- P3252 [JLOI2012]树
题目描述 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点,根的深度是0,它的儿子节点的深度为1.路径不 ...
- 2Python-DAY2模块
1.模块 标准模块:不需要安装,可以直接导入的模块(库) 创建名为sys.py文件,执行该文件: import sys print(sys.path)打印环境变量 (python2中执行这个命令会报错 ...
- 吴裕雄--天生自然 JAVA开发学习:String 类
public class StringDemo{ public static void main(String args[]){ char[] helloArray = { 'r', 'u', 'n' ...
- UML-领域模型-例子与总结
1.pos处理销售,示例 2.结论 1).每次迭代中,画概念模型只需要30分钟左右.避免瀑布思维. 2).在细化阶段开始构建概念模型
- winEdt打开tex文件报错解决方法
写论文真的是不断遇到各种困难啊,这个Latex软件就很多,好不容易中个A1区的文章,期刊说更新了新的模板就下载了,忽然发现打开有reading error,看不到一点内容,神奇的是竟然可以运行.这样的 ...
- 框架-Spring容器
1. Spring Ioc容器 容器是Spring框架的基础,容器会创建.串联.配置对象,并且能管理对象的整个生命周期.如下是代表 Spring工作原理 MetaData 指定哪些对象实例化.配置 ...
- Django专题-ugettext_lazy
标准翻译 使用函数 ugettext() 来指定一个翻译字符串. 作为惯例,使用短别名 _ 来引入这个函数以节省键入时间. 在下面这个例子中,文本 "Welcome to my site&q ...
- HDU - 4578 线段树+三重操作
这道题自己写了很久,还是没写出来,也看了很多题解,感觉多数还是看的迷迷糊糊,最后面看到一篇大佬的才感觉恍然大悟. 先上一篇大佬的题解:https://blog.csdn.net/aqa20372995 ...
- Mac 终端实现快速定位命令 自动补全目录
基于macOS oh-my-zsh 切换终端主题 incr.zsh 实现快速定位命令 自动补全目录 效果预览 步骤 1.安装 oh-my-zsh sh -c "$(curl -fsSL ht ...