1393:联络员(liaison)

简介: 1393:联络员(liaison)

1393:联络员(liaison)

时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

Tyvj已经一岁了,网站也由最初的几个用户增加到了上万个用户,随着Tyvj网站的逐步壮大,管理员的数目也越来越多,现在你身为Tyvj管理层的联络员,希望你找到一些通信渠道,使得管理员两两都可以联络(直接或者是间接都可以)。Tyvj是一个公益性的网站,没有过多的利润,所以你要尽可能的使费用少才可以。

目前你已经知道,Tyvj的通信渠道分为两大类,一类是必选通信渠道,无论价格多少,你都需要把所有的都选择上;还有一类是选择性的通信渠道,你可以从中挑选一些作为最终管理员联络的通信渠道。数据保证给出的通行渠道可以让所有的管理员联通。

【输入】

第一行n,m表示Tyvj一共有n个管理员,有m个通信渠道;

第二行到m+1行,每行四个非负整数,p,u,v,w 当p=1时,表示这个通信渠道为必选通信渠道;当p=2时,表示这个通信渠道为选择性通信渠道;u,v,w表示本条信息描述的是u,v管理员之间的通信渠道,u可以收到v的信息,v也可以收到u的信息,w表示费用。

【输出】

最小的通信费用。

【输入样例】

5 6

1 1 2 1

1 2 3 1

1 3 4 1

1 4 1 1

2 2 5 10

2 2 5 5

【输出样例】

9

【提示】

【样例解释】

1-2-3-4-1存在四个必选渠道,形成一个环,互相可以到达。需要让所有管理员联通,需要联通2号和5号管理员,选择费用为5的渠道,所以总的费用为9。

【注意】

U,v之间可能存在多条通信渠道,你的程序应该累加所有u,v之间的必选通行渠道

【数据范围】

对于30%的数据,n≤10,m≤100;

对于50%的数据, n≤200,m≤1000

对于100%的数据,n≤2000,m≤10000

1. #include <iostream>
2. #include <stdio.h>
3. #include <algorithm>
4. using namespace std;
5. const int maxn=2010;  // 最大点数
6. const int maxm=20010; // 最大边数
7. struct point{
8. int x,y,c;  // 无向边(x,y),权值为c
9. }a[maxm];       // 存储询问的边
10. bool cmp(const point &a,const point &b){
11. return a.c<b.c;
12. }
13. int n,m,ans,k;    // n为点数,m为边数(包括询问边),ans为最小生成树的边权和,k为询问边的数量。
14. int f[maxn];      // 并查集,用于判断两个节点是否在同一集合
15. int find(int x){   // 查找x所属集合的代表元
16. if(f[x]==x) return x;
17. return f[x]=find(f[x]);  // 路径压缩
18. }
19. void unionn(int x,int y){  // 将x和y所属集合合并
20. int a=find(x);
21. int b=find(y);
22. if(a!=b) f[a]=b;
23. }
24. int main(){
25. scanf("%d %d",&n,&m);
26. for(int i=1;i<=n;i++) f[i]=i;  // 并查集初始化,每个节点的父亲为自己
27. int p,u,v,w;
28. for(int i=1;i<=m;i++){
29. scanf("%d %d %d %d",&p,&u,&v,&w);
30. if(p==1){  // 如果该边是连通操作,则将u和v所在的集合合并
31. unionn(u,v);ans+=w;
32.         }
33. else{     // 否则,将该边保存到a数组中,用于后续的Kruskal算法构造最小生成树
34.             k++;a[k].x=u;a[k].y=v;a[k].c=w;
35.         }
36.     }
37. sort(a+1,a+k+1,cmp);  // 对询问边按照权重进行排序
38. for(int i=1;i<=k;i++){
39. if(find(a[i].x)!=find(a[i].y)){  // 如果a[i]的两个端点不在同一个集合中,则可以选择使用这条边,将它们合并,并增加对应的权值。
40. unionn(a[i].x,a[i].y);
41.             ans+=a[i].c;
42.         }
43.     }
44. printf("%d",ans);  // 输出最小生成树的权值和
45. return 0;
46. }


相关文章
|
文字识别 计算机视觉 Python
python opencv识别并提取表格数据
使用opencv、PaddleOCR 识别表格并提取表格数据
2992 0
python opencv识别并提取表格数据
|
8月前
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
1160 24
|
12月前
|
敏捷开发 数据可视化 搜索推荐
项目管理看板:项目进度的清晰导航
项目管理看板是一种可视化的任务管理工具,起源于日本丰田公司的精益生产方法。它通过分阶段展示任务状态,帮助团队实时跟踪进展,提高协作效率。看板广泛应用于软件开发、营销、产品开发和客户服务等领域,核心功能包括可视化任务管理、实时跟踪、提高协作、标识阻塞问题和数据分析。未来,看板将更加智能化和集成化,支持更多自定义功能。
|
人工智能 运维 数据挖掘
跨界融合:AI与5G技术如何共同推动数字化转型
【10月更文挑战第29天】本文探讨了人工智能(AI)与第五代移动通信技术(5G)的结合如何推动数字化转型。通过高速、低延迟的5G网络和AI的数据分析能力,两者相辅相成,实现了智能化网络运维、增强网络功能和多行业的实际应用。文中提供了网络流量预测和故障预测的示例代码,展示了技术的实际应用潜力。
397 1
|
安全 网络协议 网络安全
Windows Server 2003 Web服务器搭建
Windows Server 2003 Web服务器搭建
180 1
1395:烦人的幻灯片(slides)
1395:烦人的幻灯片(slides)
228 1
|
网络协议 网络架构
NAT 原理与实验操作
NAT 原理与实验操作
|
小程序
uniapp 实现当前页面分享至微信好友或朋友圈功能(带参数和无参数)
uniapp 实现当前页面分享至微信好友或朋友圈功能(带参数和无参数)
2952 0
|
分布式计算 Hadoop Java
Hadoop【环境搭建 01】【hadoop-3.1.3 单机版】【Linux环境 腾讯云 CentOS Linux release 7.5.1804】【详细】
Hadoop【环境搭建 01】【hadoop-3.1.3 单机版】【Linux环境 腾讯云 CentOS Linux release 7.5.1804】【详细】
278 0
|
C语言 C++
信奥赛一本通1142:单词的长度
【题目描述】 输入一行单词序列,相邻单词之间由1个或多个空格间隔,请对应地计算各个单词的长度。 注意:如果有标点符号(如连字符,逗号),标点符号算作与之相连的词的一部分。没有被空格间开的符号串,都算作单词。 【输入】 一行单词序列,最少1个单词,最多300个单词,单词之间用至少1个空格间隔。单词序列总长度不超过1000。 【输出】 依次输出对应单词的长度,之间以逗号间隔。
759 0