九度 题目1109:连通图
来源:互联网 发布:刀锋 知乎 编辑:程序博客网 时间:2024/05/02 05:01
- 题目描述:
给定一个无向图和其中的所有边,判断这个图是否所有顶点都是连通的。
- 输入:
每组数据的第一行是两个整数 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
样例输出:
NO
YES
并查集解决,思路简单,代码如下:
#include <stdio.h>
#define N 1000
int fin[N];
int visit[N];
int Find(int a){
if(a == fin[a]){
return a;
}
return Find(fin[a]);
}
void Merge(int a,int b){
a = Find(a);
b = Find(b);
fin[a] = fin[b];
}
int main(){
int n,m;
int a,b;
int count;
while(scanf("%d",&n) != EOF && n){
count = 0;
scanf("%d",&m);
for(int i = 1; i <= n; i++){
fin[i] = i;
visit[i] = 0;
}
for(int i = 0; i < m; i++){
scanf("%d%d",&a,&b);
Merge(a,b);
}
for(int i = 1; i <= n; i++){
visit[Find(i)] = 1;
}
for(int i = 1; i <= n; i++){
if(visit[i] == 1){
count++;//统计此图共有几个根节点
}
}
if(count == 1){//只有一个连通域!则此图为一个连通图!
printf("YES\n");
}else if(count > 1){
printf("NO\n");
}
}
}
- 九度oj 题目1109:连通图
- 九度 题目1109:连通图
- 九度题目1109:连通图
- 九度 题目1109:连通图
- 题目1109:连通图 九度OJ
- 九度 题目1109:连通图
- 九度OJ题目1109:连通图
- 【九度OJ】题目1109:连通图 解题报告
- 九度1109:连通图
- 【九度】题目1545:奇怪的连通图
- <九度 OJ>题目1545:奇怪的连通图
- 题目1109:连通图
- 题目1109:连通图
- 题目1109:连通图
- 题目1109:连通图
- 题目1109:连通图
- 题目1109:连通图
- 题目1109:连通图
- Codeforces 484B Maximum Value(高效+二分)
- 【数据结构】队列的典型应用
- nginx利用image_filter动态生成缩略图
- redis实现简单的条件查询功能
- ListView中如何使用Button,让onClick和onItemClick事件共存
- 九度 题目1109:连通图
- The prefix "mvc" for element "mvc:annotation-driven" is not bound 的解决方法
- 下次VV的说法
- 给一个整数数组,对数组中的每个整数中的所有数字按照升序排列(如101排序后为011)请写一个方法,输出排序后的数组中的最大数。 例如有一个数组: 101、132、375,排序后11、123、357,
- 记录一次让我吐血的spring3 MVC HTTP406 Json转换错误
- Codeforces 484A Bits(贪心)
- 【BZOJ2144】跳跳棋
- JSP中两种include的区别
- Linux 下完整安装ffmpeg(包括各种解码器)