题解 | #连通图#

连通图

http://www.nowcoder.com/practice/569e89823a5141fe8a11ab7d4da21edf

#include<iostream>
#include<cstdio>

using namespace std;

const int MAXN = 1000;

int father[MAXN];

int height[MAXN];

void Initial(int n) {   //n个节点
	for(int i = 0; i <= n; ++i) {   //初始状态下,每个节点的父节点是其自身
		father[i] = i;
		height[i] = 0;
	}
	return;
}


int Find(int x) {
	if(father[x] == x) {
		return x;
	} else {
		father[x] = Find(father[x]);
	}
	return father[x];
}


void Union(int x,int y) {
	x = Find(x);
	y = Find(y);
	if(x != y) {
		if(height[x] < height[y]) {
			father[x] = y;
		} else if(height[x] > height[y]) {
			father[y] = x;
		} else {
			father[y] = x;
			height[x]++;
		}
	}
}



int main() {
	int n;   //顶点数
	int m;   //边数
	while(scanf("%d%d",&n,&m) != EOF) {
		if(n == 0) {
			break;
		}
		Initial(n);
		while(m--) {  //输入m条边,每条边由两个顶点表示
			int x;
			int y;
			scanf("%d%d",&x,&y);
			Union(x,y);   //合并
		}
		int count = 0;
		for(int i = 1; i <= n; ++i){
			if(i == Find(i)){   //是根节点
				count++;
			}
		}
		if(count == 1){   //表示是连通的
			printf("YES\n");
		}else{     //非连通
			printf("NO\n");
		}
	}
	return 0;
}
全部评论

相关推荐

点赞 评论 收藏
分享
找工作勤劳小蜜蜂:自我描述部分太差,完全看不出想从事什么行业什么岗位,也看不出想在哪个地区发展,这样 会让HR很犹豫,从而把你简历否决掉。现在企业都很注重员工稳定性和专注性,特别对于热爱本行业的员工。 你实习的工作又太传统的it开发(老旧),这部分公司已经趋于被淘汰,新兴的互联网服务业,比如物流,电商,新传媒,游戏开发和传统的It开发有天然区别。不是说传统It开发不行,而是就业岗位太少,基本趋于饱和,很多老骨头还能坚持,不需要新血液。 工作区域(比如长三角,珠三角,成渝)等也是HR考虑的因素之一,也是要你有个坚定的决心。否则去几天,人跑了,HR会被用人单位骂死。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务