还是畅通工程(最小生成树 并查集 Prim Kruskal)
Description
某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。
Input
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。
当N为0时,输入结束,该用例不被处理。
Output
对每个测试用例,在1行里输出最小的公路总长度。
Sample Input
3
1 2 1
1 3 2
2 3 4
4
1 2 1
1 3 4
1 4 1
2 3 3
2 4 2
3 4 5
0
Sample Output
3
5
#include <iostream>
#include <algorithm>
using namespace std;
struct Node
{
int a;
int b;
int dis;
};
int father[101];
Node node[5100];
bool cmp(Node A, Node B)
{
return A.dis < B.dis;
}
int Find(int t)
{
int temp = t;
while (temp != father[temp])
temp = father[temp];
return father[t] = temp;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n, m;
while (cin >> n && n != 0)
{
for (int i = 1; i <= n; ++i)
father[i] = i;
m = n * (n - 1) / 2;
for (int i = 0; i < m; ++i)
cin >> node[i].a >> node[i].b >> node[i].dis;
sort(node, node + m, cmp);
int ans = 0, cnt = 0;
for (int i = 0; i < m; ++i)
{
int a = Find(node[i].a);
int b = Find(node[i].b);
if (a != b)
{
ans += node[i].dis;
cnt++;
father[b] = a;
if (cnt == n - 1)
break;
}
}
cout << ans << endl;
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int arc[100][100];
int V[100];
int ans, n;
int ok()
{
for (int i = 0; i < n; i++)
if (V[i] == 0)
return 1;
return 0;
}
void solve()
{
int shortPath[100];
int t = 0, i, j, min;
memset(shortPath, 0x7f, sizeof(shortPath));
memset(V, 0, sizeof(V));
ans = 0;
while (ok())
{
V[t] = 1;
for (i = 0; i < n; i++)
if (arc[t][i] > 0 && V[i] == 0 && arc[t][i] < shortPath[i])
shortPath[i] = arc[t][i];
min = 0;
for (i = 1; i < n; i++)
if (shortPath[min] > shortPath[i] && shortPath[i] != 0)
min = i;
if (min != 0)
{
ans += shortPath[min];
t = min;
shortPath[min] = 0;
}
}
}
int main()
{
int m, i;
int v1, v2, w;
while (~scanf("%d", &n) && n)
{
memset(arc, 0, sizeof(arc));
m = n * (n - 1) / 2;
while(m--)
{
scanf("%d%d%d", &v1, &v2, &w);
arc[v1 - 1][v2 - 1] = w;
arc[v2 - 1][v1 - 1] = w;
}
solve();
printf("%d\n", ans);
}
return 0;
}
还是畅通工程(最小生成树 并查集 Prim Kruskal)的更多相关文章
- hdu1875 畅通工程再续 最小生成树并查集解决---kruskal
http://acm.hdu.edu.cn/showproblem.php?pid=1875 New~ 欢迎“热爱编程”的高考少年——报考杭州电子科技大学计算机学院关于2015年杭电ACM暑期集训队的 ...
- hdu 1879 继续畅通工程 (并查集+最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1879 继续畅通工程 Time Limit: 2000/1000 MS (Java/Others) ...
- 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 1232 畅通工程(并查集)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了 ...
- HDU 1863 畅通工程 (并查集)
原题链接:畅通工程 题目分析:典型的并查集模版题,这里就不详细叙述了.对算法本身不太了解的可以参考这篇文章:并查集算法详解 代码如下: #include <iostream> #inclu ...
随机推荐
- canal 整合RabbitMQ
环境如下: canal: 1.15-alpha-1 mysql 5.6.49 rabbitmq 3.7.14 Erlang 21.3 canal 安装和启动 见上篇文章 canal快速安装启动 但是 ...
- Mac下面 matplotlib 中文无法显示解决
一.环境描述 python 3.7 mac 10.14.5 二.问题描述 如下图所示,当使用matplotlib绘制图片的时候,所有的中文字符无法正常显示. 三.解决方法 1.下载字体ttf文件 链接 ...
- Java9系列第6篇-Stream流API的增强
我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还是有很多的特性值得关注.期待您能关注我,我将把java 9 ...
- UEditor 自定义图片视频尺寸校验
UEditor支持单图.多图以及视频上传,编辑器配置项支持文件格式.文件大小校验,对于文件宽高尺寸校验暂不支持.这里记录一下自定义图片.视频尺寸校验过程,内容核心主要是扩展校验逻辑和增加自定义提示文本 ...
- Helium文档13-WebUI自动化-helium快速切换到selenium状态并调用其方法
前言 前面说过helium是对Selenium 进行了封装,那么我们如何使用selenium的方法呢,通过下面的介绍,我们能够清楚在helium中能够使用selenium的任何方法 入参介绍 def ...
- 浅谈NLP 文本分类/情感分析 任务中的文本预处理工作
目录 浅谈NLP 文本分类/情感分析 任务中的文本预处理工作 前言 NLP相关的文本预处理 浅谈NLP 文本分类/情感分析 任务中的文本预处理工作 前言 之所以心血来潮想写这篇博客,是因为最近在关注N ...
- CDH+Kylin三部曲之二:部署和设置
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 栈和堆 - JS
原始值 - Stack (栈) Number String Boolean undefined null 引用值 - Heap (堆) array object function ...data Re ...
- mininet实践应用
目录 mininet的安装和基本指令的了解 安装过程 拓扑类型和基本指令 mininet拓扑实战 拓扑的创建和编辑 对自定义拓扑一些简单的测试. 测试总结 mininet的安装和基本指令的了解 安装过 ...
- 《Head First 设计模式》:与设计模式相处
正文 一.设计原则 1.封装变化 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起. 2.针对接口编程,不针对实现编程 "针对接口编程"真正的意思是& ...