通信网络设计(最小生成树+图的联通)
题目详情:
假设你是电信工程师,需要为村庄间架设通信网络,使任何两个村庄间都可以实现通信连通(但不一定有直接的快速线路相连,只要互相间接有线路连通即可)。现有规划信息数据,列出了所有可能架设线路的两个村庄及其线路成本,请判断是否可以实现村村互联,如果可以,整个网络的最低成本是多少?如果不能实现村村互联,分成几个部分,各部分有哪些村庄?
输入格式:
第一行给出村庄数目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;
}
通信网络设计(最小生成树+图的联通)相关推荐
- 基于CAN/LIN总线的汽车通信网络设计
20 世纪90 年代以来,随着人们对汽车动力性.舒适性.经济性要求的提高,汽车上的电控系统的数量越来越多,增加的ECU 及其通信设备使汽车电路复杂程度增加,相应地降低了汽车的可靠性.这就要求必须采用能 ...
- 总线控制内部eep_CAN总线在新能源汽车中的通信网络设计及应用分析
从事汽车相关行业的小伙伴们,都知道CAN总线,它是当今汽车各电控单元之间通信的总线标准,现在几乎所有的汽车厂家都选择使用CAN总线通信.CAN总线起初便是基于BOSCH公司为了解决汽车的电子控制单元增 ...
- 网络设计与网络设备配置,网络设计需要哪些设备
在网络综合布线中信息点安装位置的选择有哪些原则? 按要求: 1.从智能楼宇角度考虑,应五个平方米一个信息点: 2.离顶或是地面30厘米位置设置墙壁内盒,住房套户不要安装在离窗户那面(因有窗帘),应在两 ...
- 网络设计:搭建校园网(组网工程课设)【译】
网络设计:搭建校园网[译] 网络拓扑 具体配置 信息楼配置 电气楼设备配置 机械楼设备配置 学校主干网配置 配置网管中心交换机 配置出口路由器 师大路由器配置 结果验证 DHCP服务验证 网络连通测试 ...
- 通信网络相关名词解释(欢迎各位指正错误或补充)
AS 应用服务器:SIP应用服务器是IMS支持的应用服务器之一,主要为Internet业务,可能包括业务能力交互管理器(SCIM)和其他应用服务器,SCIM功能实体是执行交互关联作用的一个应用,SIP ...
- 计算机网络实训报告:宿舍校园网网络设计
实训日期:2022-06-12 目录 一.技术路线说明 二.项目需求分析 1.项目介绍 2.组网需求 三.项目设计方案 四. 网络系统设计 1.拓扑图的设计 2.IP地址的设置 3.测试各台机的连通情 ...
- 通信网络基础 ——RIP、OSPF、BGP等协议及模拟实验
通信网络基础 1. 常用设备及参数说明 1.1 路由器 1.2 交换机 1.2.1 主要知识点区别 1.2.2 三层交换机配置 1.3 物理介质 2. 常用命令解释 2.1 路由器常用基本命令 2.2 ...
- 为了省电,通信网络到底有多拼?
通信网络的能耗问题,一直都是人们关注的焦点. 根据运营商财报数据,2020年,中国移动的能耗费用是376.6亿元,中国电信146.4亿元,中国联通129亿元.三大电信运营商加在一起,是652亿元.要知 ...
- [每日一问]虚拟化网络设计中为什么建议采用链路聚合
虚拟化网络设计中为什么建议采用链路聚合?原因如下: 1. 首先,链路聚合技术可以使用多个物理链路进行通信,不用担心STP: 2. 其次,当某物理链路发生故障会不影响虚拟机网络的正常运行,提供了链路冗余 ...
最新文章
- 智能车竞赛技术报告 | 智能车视觉 - 中原工学院 - 逐鹿 - 分母队
- 波士顿动力双足机器人Atlas放出逆天体操表演,网友:比我还强
- XPath 使用那些事
- 调用c++_WebAssembly: 在C代码中调用JS的函数
- 第五十期:详解语音识别技术的发展
- 如何把meshlab中的圆环去掉_如何设计一座太空城?
- Qt工作笔记-使用QpropertyAnimation实现控件上下滑动的效果
- 《Scikit-Learn与TensorFlow机器学习实用指南》第7章 集成学习和随机森林
- java classpath详解_java Classpath全解(转)
- oracle误删数据恢复
- java基于uni-app框架的民宿客房预订系统 小程序
- 2022-2028年全球与中国细菌生物农药行业市场深度调研及投资预测分析
- 济南市全国计算机二级,济南市2020年3月计算机二级报名时间|网上报名入口【12月20日9:00开通】...
- window location href is not a function错误解决
- UNITY 模拟手机滑屏功能
- utils.py 文件的理解:一些小脚本文件
- VUI+GUI,AI时代全新的立体交互方式
- opencv报错——(mtype == CV_8U || mtype == CV_8S)
- Qt渲染视频常见问题(视频渲染窗口上子窗口设置透明出现阴影问题、主窗口缩放导致视频渲染窗口部分出现视频闪烁问题)
- 锤子,剪刀,布游戏的研究