还是畅通工程(最小生成树 并查集 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 ...
随机推荐
- sql 删除所有存储过程
1.执行以下sql语句即可删除所有存储过程 --/**********删除所有存储过程*************************/-- use 数据库名 go declare @tname v ...
- 痞子衡嵌入式:MCUBootUtility v2.4发布,轻松更换Flashloader文件
-- 痞子衡维护的NXP-MCUBootUtility工具距离上一个版本(v2.3.1)发布过去2个月了,这一次痞子衡为大家带来了版本升级v2.4.0,这个版本主要有一个非常重要的更新需要跟大家特别说 ...
- poj1654 -- Area (任意多边形面积)
Area Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20444 Accepted: 5567 Description ...
- 基于ssm的客户管理系统
查看更多系统:系统大全,课程设计.毕业设计,请点击这里查看 01 概述 一个简单的客户关系管理系统 管理用户的基本数据 客户的分配 客户的流失 已经客户的状态 02 技术 ssm + jdk1.8 + ...
- Spring Boot 学习摘要--关于配置
date: 2019-12-27 09:00:00 updated: 2019-12-30 13:20:00 Spring Boot 学习摘要--关于配置 学习教程来自:B站 尚硅谷 1. 关于配置 ...
- Spring Boot学习笔记(一)——Eclipse安装STS插件
一.简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式进行配置,从而使开发人员不再需要定义样板化的配 ...
- oracle 查询数据库锁及锁处理
1.数据库锁表查询语句: SELECT SESS.SID, SESS.SERIAL#, LO.ORACLE_USERNAME, LO.OS_USER_NAME, AO.OBJECT_NAME 被锁对象 ...
- kong in kubernetes
网关 这里提到的网关特指API网关.API网关是在微服务架构的演进过程中产生的,其核心功能是聚合后端服务,为客户端调用提供统一的门户.由于网关的集中式管理,在其上又衍生了限流.负载.路由管理.安全防护 ...
- C# stopwatch的简单使用(计算程序执行时间)
首先添加引用 using System.Diagnostics;//stopwatch的引用 //声明变量 Stopwatch a=new Stopwatch();//PS:这里一定要new(实例化) ...
- Innerclasses
内部类只能让它的外部类访问,其他同包的类也无法访问!方法里也能建内部类 1 public class Innerclasses { 2 public static void main(String[] ...