九度 题目1109:连通图
来源:互联网 发布:手机看高清网络电视 编辑:程序博客网 时间:2024/05/01 23:05
九度 题目1109:连通图
原题OJ链接:http://ac.jobdu.com/problem.php?pid=1109
题目描述:
给定一个无向图和其中的所有边,判断这个图是否所有顶点都是连通的。
输入:
每组数据的第一行是两个整数 n 和 m(0<=n<=1000)。n 表示图的顶点数目,m 表示图中边的数目。如果 n 为 0 表示输入结束。随后有 m 行数据,每行有两个值 x 和 y(0< x, y <=n),表示顶点 x 和 y 相连,顶点的编号从 1 开始计算。输入不保证这些边是否重复。
输出:
对于每组输入数据,如果所有顶点都是连通的,输出”YES”,否则输出”NO”。
样例输入:
4 31 22 33 23 21 22 30 0
样例输出:
NOYES
解题思路:
该问题即在一个图上查找连通分量是否只有一个,若连通分量个数大于等于2,则输出NO,否则输出YES。初始时,每个结点都是孤立的连通分量,当读入已经建成的边后,将边的两个顶点所在集合合,表示这两个集合中的结点已经连通。
因为输入不保证这些边是否重复。所以代码 if(Tree[a]==b || Tree[b]==a) continue;
即对这种情况进行处理。
源代码:
#include<iostream>#include<cstring>using namespace std;#define MAX_N 1005int Tree[MAX_N];int findRoot(int x){ if(Tree[x]==-1) return x; else{ int tmp=findRoot(Tree[x]); Tree[x]=tmp; return tmp; }}int main(){ int n,m,a,b; while(cin>>n>>m && n!=0){ memset(Tree,-1,sizeof(Tree)); for(int i=0;i<m;i++){ cin>>a>>b; if(Tree[a]==b || Tree[b]==a) continue; a=findRoot(a); b=findRoot(b); if(a!=b ){ Tree[a]=b; } } int count=0; for(int i=1;i<=n;i++){ if(Tree[i]==-1) count++; } if(count>1) cout<<"NO"<<endl; else if(count==1) cout<<"YES"<<endl; } return 0;}
阅读全文
0 0
- 九度oj 题目1109:连通图
- 九度 题目1109:连通图
- 九度题目1109:连通图
- 九度 题目1109:连通图
- 题目1109:连通图 九度OJ
- 九度 题目1109:连通图
- 九度OJ题目1109:连通图
- 【九度OJ】题目1109:连通图 解题报告
- 九度1109:连通图
- 【九度】题目1545:奇怪的连通图
- <九度 OJ>题目1545:奇怪的连通图
- 题目1109:连通图
- 题目1109:连通图
- 题目1109:连通图
- 题目1109:连通图
- 题目1109:连通图
- 题目1109:连通图
- 题目1109:连通图
- zuul动态配置路由规则,从DB读取
- 安卓的apk文件
- 1055. 集体照 (25)
- 交互原型画得丑?29个优秀UI/UX线框草图
- HAL的实现分析
- 九度 题目1109:连通图
- 删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录
- SSS1629替代CM108|USB游戏耳机方案|K歌麦克风方案|无线K歌方案
- ubuntu出现有线已连接却无法上网的解决方法(ubuntu连不上网)
- 阿里云服务器Mysql修改密码
- VirtualBox虚拟机中安装CentOS 7(八)安装zookeeper
- 网易2017校招 [编程题] 最长公共子括号序列@Java
- mybaits nor a Result Map was specified,以及transcation对应的@Transcational
- 设计模式