Intercommunication System
来源:互联网 发布:医疗器械软件 编辑:程序博客网 时间:2024/06/03 20:05
描述:
2010年是xx国一个多灾多难的一年,灾难使该国的通讯系统遭到了重创,全国共有n个通讯站点,分别从0到n-1进行编号,通讯部门对每两个站点的线路进行了检测,现在要你确定有哪些站点是彼此连通的。
输入:
输入数据有多组,每组数据的第一行包含两个整数n和m,其中n为通讯站点个数,接下来有m行,每一行有2个整数a和b,表示站点a和b通讯正常。其中1<=n<=250。
输入以EOF结束。
输出:
针对每组输入,将所有连通的站点进行分组,并将每组按照站点从小到大的顺序输出,如果有多组,所有的组根据每组最小的站点编号进行从小到大的排序后输出。
每组数据输出之后加一个空行
样例输入:
3 3
0 1
1 2
0 2
5 1
0 2
样例输出:
0 1 2
0 2
1
3
4
代码如下:
//并查集的简单应用 #include<stdio.h>int site[300];int find(int a) //寻找根结点 {if(a!=site[a])site[a]=find(site[a]);return site[a];}void sove(int a,int b){int x=find(a);int y=find(b);if(x!=y){if(x<y)//判断两数的根是否相等,不相等的话把小站点赋值给大站点的根,有利于接下去的寻找 {site[y]=x;} else{site[x]=y;}} }int main(){int n,m;while(scanf("%d %d",&n,&m)!=EOF){int a,b;for(int i=0;i<300;i++){site[i]=i;}while(m--){scanf("%d %d",&a,&b);sove(a,b);}for(int i=0;i<n;i++){if(site[i]==i){printf("%d",i);//如果该站点是根直接输出即可 for(int j=i+1;j<n;j++){if(find(j)==i) //寻找后面站点的根结点是否等于i(不要错写成site[j]==i,此处一开始写错wa了两小时) {printf(" %d",j);}}printf("\n");}}printf("\n");}return 0;}
阅读全文
0 0
- Intercommunication System
- TZC Intercommunication System
- MQ Intercommunication
- 读《A Protocol for Packet Network Intercommunication》
- 《A Protocol for Packet Network Intercommunication》 阅读报告
- system
- System
- system
- system
- system
- System
- System
- System
- system
- system ():
- system()
- System
- System
- 反码求和校验: 一个数加上自己取反得到的数正是时钟轮盘上最大那个数
- oreacle12c的安装配置使用plsql登录
- Unity-Animator深入系列---API详解
- 撤销功能的实现——备忘录模式(三)
- Windows下Qt creator调试器的安装与配置
- Intercommunication System
- python基础5:文件操作、综合应用
- 网络 一一 整理cookie和session的区别
- 融混
- ajax解析json数据时,date显示为秒的形式(1511352532000)
- 385. Mini Parser
- 机器学习-python利用SVD编写推荐引擎
- 生成器,迭代器
- 杭code 计算分子量