某地区经过对城镇交通状况的调查,得到现有城镇间快速道路的统计数据,并提出“畅通工程”的目标:使整个地区任何两个城镇间都可以实现快速交通(但不一定有直接的快速道路相连,只要互相间接通过快速路可达即可)。现得到城镇道路统计表,表中列出了有可能建设成快速路的若干条道路的成本,求畅通工程需要的最低成本。
输入格式:

输入的第一行给出城镇数目N (1<N≤1000)和候选道路数目M≤3N;随后的M行,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号(从1编号到N)以及该道路改建的预算成本。
输出格式:

输出畅通工程需要的最低成本。如果输入数据不足以保证畅通,则输出“Impossible”。
输入样例1:

6 15
1 2 5
1 3 3
1 4 7
1 5 4
1 6 2
2 3 4
2 4 6
2 5 2
2 6 6
3 4 6
3 5 1
3 6 1
4 5 10
4 6 8
5 6 3

输出样例1:

12

输入样例2:

5 4
1 2 1
2 3 2
3 1 3
4 5 4

输出样例2:

Impossible

这道题显然是最小生成树,学过数

据结构的话肯定是学过的,主要问

题在于你还记得吗…

这道题我用的是克鲁斯卡尔算法,定义了一个结构体数组,用来把每一个边都存起来,同时被存放的还有两个顶点以及边权.因为克鲁斯卡尔算法是每次从最小的边权里拿出来一个,所以把结构体数组按照边权排序.最后只要新拿到的边的两个顶点不在同一个集合内,也就是未曾搭建公路以使这两个顶点联通,那么就通过并查集里的join()函数让两个点联通,同时让ans加上边权.如果最终答案并不能使得图联通,也没有关系,只需要判断是否所有顶点都在同意集合内即可.

说实话,我并查集和克鲁斯卡尔算法早已经忘了,不过好在有一个代码模板文档,里面不讲述算法如何使用,只给算法的实现代码,靠着这个文档,我竟然做出来了这道题.

//
// Created by TIGA_HUANG on 2020/9/24.
//#include <iostream>
#include <algorithm>using namespace std;int pre[1010];               //存放第i个元素的父节点
int union_search(int root) {                  //查找根结点int son, tmp;son = root;while (root != pre[root])                 //寻找根结点root = pre[root];while (son != root) {                     //路径压缩tmp = pre[son];pre[son] = root;son = tmp;}return root;
}void join(int root1, int root2) {        //判断是否连通,不连通就合并int x, y;x = union_search(root1);y = union_search(root2);if (x != y)                          //如果不连通,就把它们所在的连通分支合并pre[x] = y;
}int N, M;
struct Edge {int a, b;int length;
} edge[3005];bool operator<(Edge &x, Edge &y) {return x.length < y.length;
}int ans;void kruskal() {ans = 0;for (int i = 0; i < M; ++i) {if (union_search(edge[i].a) != union_search(edge[i].b)) {join(edge[i].a, edge[i].b);ans += edge[i].length;}}
}
void init() {for (int i = 0; i <= N; ++i) {pre[i] = i;}
}
int main() {cin >> N >> M;for (int i = 0; i < M; ++i) {cin >> edge[i].a >> edge[i].b >> edge[i].length;}sort(edge, edge + M);init();kruskal();bool flag = true;for (int i = 2; i <= N; ++i) {if (union_search(i - 1) != union_search(i)) {flag = false;break;}}if (flag) {cout << ans << '\n';} else {cout << "Impossible\n";}return 0;
}

这是我参考的代码模板文档,说是参考几乎就是把里面的代码来了个复制粘贴

畅通工程之最低成本建设问题 (30分)相关推荐

  1. 畅通工程之最低成本建设问题(30 分)

    这个题目就是一个最小生成树,如果无法构成就输出impossible ,就是构成最小生成树的时候,每选择一条边然后加加,最后统计是否有n-1条就可以. 最小生成树的讲解在我的其他的博客中有提到 #inc ...

  2. PTA5-2 畅通工程之最低成本建设问题 (克鲁斯卡尔)

    某地区经过对城镇交通状况的调查,得到现有城镇间快速道路的统计数据,并提出"畅通工程"的目标:使整个地区任何两个城镇间都可以实现快速交通(但不一定有直接的快速道路相连,只要互相间接通 ...

  3. 7-50 畅通工程之局部最小花费问题 (35 分)(思路加详解)来呀兄弟们冲呀呀呀呀呀呀呀

    一:题目 某地区经过对城镇交通状况的调查,得到现有城镇间快速道路的统计数据,并提出"畅通工程"的目标:使整个地区任何两个城镇间都可以实现快速交通(但不一定有直接的快速道路相连,只要 ...

  4. 7-3 公路村村通(30 分)

    7-5 畅通工程之最低成本建设问题(30 分) 某地区经过对城镇交通状况的调查,得到现有城镇间快速道路的统计数据,并提出"畅通工程"的目标:使整个地区任何两个城镇间都可以实现快速交 ...

  5. 畅通工程 HDU - 1863

    省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可能建设公路的若干条道 ...

  6. 畅通工程//最小生成树prim

    题目: 畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  7. 【1863】畅通工程 (HDU)

     畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  8. 题目1024:畅通工程

    /* 题目描述:省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出了有可能建 ...

  9. HDUOJ---1863畅通工程

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

最新文章

  1. 汇编试验十五:安装新的int 9中断例程
  2. Laravel中使用模型对数据进行操作
  3. python组合数据类型有哪些_Python学习之组合数据类型
  4. session的存储方式和配置
  5. 数据结构——字符串(未完)
  6. 贵州·中国南方数据中心示范基地获批
  7. 各种快速幂(qaq)
  8. ARC082F - Sandglass(思维)
  9. GDKOI2021总结
  10. 红帽RHEL8和RHEL7有什么区别?
  11. Oracle变异表解决方法--ORA-04091错误
  12. 瑞星正版序列号,得来全不费功夫!Google搜索技巧
  13. 在Linux下安装和使用MySQL
  14. 埃森哲:AI成新生产要素,2035年将中国经济增速提高1.6% | 附下载
  15. 64码高清电视 android版,64体育app
  16. CentOS停更;阿里发布全新操作系统(Anolis OS),用后直呼:牛X
  17. 计算机职业生涯测评,皮纹检测职业版——职业生涯规划指南测评系统
  18. NVIDIA Geforce显卡和AMD Radeon系列显卡知识
  19. VMware vCenter Server 8.0U1 发布 - 集中式管理 vSphere 环境
  20. git 提交报错 Incorrect username or password ( access token )

热门文章

  1. 【课设/毕业设计】电力系统潮流计算(Matlab代码实现)
  2. 色谱法——科研生必用的分析方法!
  3. 外部排序--归并算法实现
  4. 编译原理实验一 词法分析程序设计与实现
  5. 个人信息保护建设面临的问题和困境及解决方案
  6. 通配符SSL证书 什么是通配符SSL证书 通配符SSL证书的好处
  7. 软件工程—软件工程学概述
  8. AbsoluteLayout
  9. BalalaPower个人解题心得
  10. 华为HG8245光纤终端及开路由