题目详情:

假设你是电信工程师,需要为村庄间架设通信网络,使任何两个村庄间都可以实现通信连通(但不一定有直接的快速线路相连,只要互相间接有线路连通即可)。现有规划信息数据,列出了所有可能架设线路的两个村庄及其线路成本,请判断是否可以实现村村互联,如果可以,整个网络的最低成本是多少?如果不能实现村村互联,分成几个部分,各部分有哪些村庄?
输入格式:
第一行给出村庄数目n (1≤n≤50)和候选线路条数m≥0;随后的m行,每行给出3个正整数,分别是该条线路直接连通的两个村庄的编号(编号从1开始起编)以及该线路的建设成本。

输出格式: 输出是否实现村村互联的判断结果。 如果是,再输出整个网络的最低成本。
如果不能实现互联,输出分成几部分,每部分有哪些村庄。每个不连通部分的中的顶点是从小到大 。各部分的前后顺序也是按第一个顶点从小到大列出。

输入样例: 在这里给出一组输入。例如:
6 10
1 2 6
1 5 10
1 6 12
2 4 5
2 6 8
2 3 3
3 4 7
4 5 9
4 6 11
5 6 16
输出样例:
在这里给出相应的输出。例如:
YES!
Total cost:31

分析:求最小花费,很明显是裸的最小生成树。然后是求具体的联通块,我的想法是 从最小点开始dfs,路径上能够访问到的肯定是一个集合内的,最后排一下序即可。(突然发现既然已经用了并查集,那么可以不用再dfs了。。。)

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
const int N=1e2+5;int n,m,f[N],vis[N],cnt;
vector<int>v[N],ans[N];
struct node{int u,v,w;
}a[N];
//按照边权升序排序
bool cmp(node x,node y){return x.w<y.w;
}
//路径压缩的并查集
int find(int x){return x==f[x]?x:f[x]=find(f[x]);
}
void dfs(int x,int no){for(int i=0;i<v[x].size();i++){if(!vis[v[x][i]]){ans[no].push_back(v[x][i]);vis[v[x][i]]=1;dfs(v[x][i],no);}}
}
int main(){cin>>n>>m;for(int i=0;i<m;i++){cin>>a[i].u>>a[i].v>>a[i].w;v[a[i].u].push_back(a[i].v);v[a[i].v].push_back(a[i].u);}int num=0,sum=0;for(int i=0;i<=n;i++)f[i]=i;sort(a,a+m,cmp);for(int i=0;i<m;i++){int x=a[i].u,y=a[i].v;x=find(x),y=find(y);if(x!=y){//合并不在一个集合内的,更新总代价f[x]=y;num++;sum+=a[i].w;//已经联通了if(num>=n-1) break;}}if(num<n-1){cout<<"NO!"<<endl;for(int i=1;i<=n;i++){if(!vis[i]){vis[i]=1;ans[cnt].push_back(i);dfs(i,cnt++);}}for(int i=0;i<cnt;i++){sort(ans[i].begin(),ans[i].end());cout<<i+1<<" part:";for(int j=0;j<ans[i].size();j++){if(j) cout<<" ";cout<<ans[i][j];}cout<<endl;}}else{cout<<"YES!"<<endl;cout<<"Total cost:"<<sum<<endl;}return 0;
}

通信网络设计(最小生成树+图的联通)相关推荐

  1. 基于CAN/LIN总线的汽车通信网络设计

    20 世纪90 年代以来,随着人们对汽车动力性.舒适性.经济性要求的提高,汽车上的电控系统的数量越来越多,增加的ECU 及其通信设备使汽车电路复杂程度增加,相应地降低了汽车的可靠性.这就要求必须采用能 ...

  2. 总线控制内部eep_CAN总线在新能源汽车中的通信网络设计及应用分析

    从事汽车相关行业的小伙伴们,都知道CAN总线,它是当今汽车各电控单元之间通信的总线标准,现在几乎所有的汽车厂家都选择使用CAN总线通信.CAN总线起初便是基于BOSCH公司为了解决汽车的电子控制单元增 ...

  3. 网络设计与网络设备配置,网络设计需要哪些设备

    在网络综合布线中信息点安装位置的选择有哪些原则? 按要求: 1.从智能楼宇角度考虑,应五个平方米一个信息点: 2.离顶或是地面30厘米位置设置墙壁内盒,住房套户不要安装在离窗户那面(因有窗帘),应在两 ...

  4. 网络设计:搭建校园网(组网工程课设)【译】

    网络设计:搭建校园网[译] 网络拓扑 具体配置 信息楼配置 电气楼设备配置 机械楼设备配置 学校主干网配置 配置网管中心交换机 配置出口路由器 师大路由器配置 结果验证 DHCP服务验证 网络连通测试 ...

  5. 通信网络相关名词解释(欢迎各位指正错误或补充)

    AS 应用服务器:SIP应用服务器是IMS支持的应用服务器之一,主要为Internet业务,可能包括业务能力交互管理器(SCIM)和其他应用服务器,SCIM功能实体是执行交互关联作用的一个应用,SIP ...

  6. 计算机网络实训报告:宿舍校园网网络设计

    实训日期:2022-06-12 目录 一.技术路线说明 二.项目需求分析 1.项目介绍 2.组网需求 三.项目设计方案 四. 网络系统设计 1.拓扑图的设计 2.IP地址的设置 3.测试各台机的连通情 ...

  7. 通信网络基础 ——RIP、OSPF、BGP等协议及模拟实验

    通信网络基础 1. 常用设备及参数说明 1.1 路由器 1.2 交换机 1.2.1 主要知识点区别 1.2.2 三层交换机配置 1.3 物理介质 2. 常用命令解释 2.1 路由器常用基本命令 2.2 ...

  8. 为了省电,通信网络到底有多拼?

    通信网络的能耗问题,一直都是人们关注的焦点. 根据运营商财报数据,2020年,中国移动的能耗费用是376.6亿元,中国电信146.4亿元,中国联通129亿元.三大电信运营商加在一起,是652亿元.要知 ...

  9. [每日一问]虚拟化网络设计中为什么建议采用链路聚合

    虚拟化网络设计中为什么建议采用链路聚合?原因如下: 1. 首先,链路聚合技术可以使用多个物理链路进行通信,不用担心STP: 2. 其次,当某物理链路发生故障会不影响虚拟机网络的正常运行,提供了链路冗余 ...

最新文章

  1. 智能车竞赛技术报告 | 智能车视觉 - 中原工学院 - 逐鹿 - 分母队
  2. 波士顿动力双足机器人Atlas放出逆天体操表演,网友:比我还强
  3. XPath 使用那些事
  4. 调用c++_WebAssembly: 在C代码中调用JS的函数
  5. 第五十期:详解语音识别技术的发展
  6. 如何把meshlab中的圆环去掉_如何设计一座太空城?
  7. Qt工作笔记-使用QpropertyAnimation实现控件上下滑动的效果
  8. 《Scikit-Learn与TensorFlow机器学习实用指南》第7章 集成学习和随机森林
  9. java classpath详解_java Classpath全解(转)
  10. oracle误删数据恢复
  11. java基于uni-app框架的民宿客房预订系统 小程序
  12. 2022-2028年全球与中国细菌生物农药行业市场深度调研及投资预测分析
  13. 济南市全国计算机二级,济南市2020年3月计算机二级报名时间|网上报名入口【12月20日9:00开通】...
  14. window location href is not a function错误解决
  15. UNITY 模拟手机滑屏功能
  16. utils.py 文件的理解:一些小脚本文件
  17. VUI+GUI,AI时代全新的立体交互方式
  18. opencv报错——(mtype == CV_8U || mtype == CV_8S)
  19. Qt渲染视频常见问题(视频渲染窗口上子窗口设置透明出现阴影问题、主窗口缩放导致视频渲染窗口部分出现视频闪烁问题)
  20. 锤子,剪刀,布游戏的研究

热门文章

  1. 【割边缩点】解题报告:POJ - 3694 - Network(Tarjan割边缩点 + LCA + 并查集优化)
  2. 攻防世界 适合做桌面_FIFA足球世界球员特性解析:精神篇
  3. Lightroom学习随笔
  4. CodeMirror 5.26.0 发布,在线代码编辑器
  5. Uva 11997 多路归并
  6. ViewPager的缓存机制
  7. 正则表达式模式修正符
  8. input按钮的事件处理大全
  9. awk 控制语句(if for do while)
  10. 在线项目管理软件推荐