还是畅通工程(最小生成树 并查集 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 ...
随机推荐
- 第二十章 nginx常见问题
一.Nginx常见问题 一.nginx多server优先级 在开始处理一个http请求时,nginx会取出header头中的Host变量,与nginx.conf中的每个server_name进行匹配, ...
- 树莓派调试PCF8591遇到的小问题
错误提示:bus = smbus.SMBus(1) IOError: [Errno 2] No such file or directory 提示的内容为端口没有打开即IIC端口:如图,打开IIC使能 ...
- ServletRequest使用介绍
ServletRequest: 定义将客户端请求信息提供给某个 servlet 的对象:servlet 容器创建 ServletRequest 对象,并将该对象作为参数传递给该servlet的serv ...
- Spring+Hibernate+Struts2整合之实现登录功能
前端代码: <form id="loginForm" action="${ pageContext.request.contextPath }/user_login ...
- forword与redirect
1.从地址栏显示来说 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地 ...
- IntentService下载任务
onHandleIntent开启一个线程按顺序处理任务,不适合做大量任务 public class MainActivity extends AppCompatActivity { protected ...
- OpenSpiel 随笔 05.14
------------恢复内容开始------------ 这两天年总算把自己的游戏写完了,也通过了所有的测试. 我将自己的代码上传到了我的github上, 地址是 https://github.c ...
- 并发编程——多线程计数的更优解:LongAdder原理分析
前言 最近在学习ConcurrentHashMap的源码,发现它采用了一种比较独特的方式对map中的元素数量进行统计,自然是要好好研究一下其原理思想,同时也能更好地理解ConcurrentHashMa ...
- java关键字之abstract
Java 允许类,借口或成员方法具有抽象属性. abstract 修饰的类叫做抽象类,该类不能被实例化. abstract 修饰的方法叫抽象方法,抽象方法只有声明部分,没有具体的方法体. 接口总是 ...
- Luogu P4208 [JSOI2008]最小生成树计数
题意 给定一个 \(n\) 个点 \(m\) 条边的图,求最小生成树的个数. \(\texttt{Data Range:}1\leq n\leq 100,1\leq m\leq 10^4\) 题解 一 ...