题目描述
给定一个无向图和其中的所有边,判断这个图是否所有顶点都是连通的。
输入格式
输入包含若干组数据。
每组数据第一行包含两个整数 n 和 m,表示无向图的点和边数。
接下来 m 行,每行包含两个整数 x,y,表示点 x 和点 y 相连。
点的编号从 1 到 n。
图中可能存在重边和自环。
输出格式
每组数据输出一行,一个结果,如果所有顶点都是连通的,输出 YES,否则输出 NO。
数据范围
输入最多包含 10 组数据。
1≤n≤1000,
1≤m≤5000,
1≤x,y≤n
思路
①可以使用搜索解,当然这里使用并查集来解更快,这是一个裸的并查集模板。
②并查集的模板已经刻进骨髓里了,但是还有一些细节需要注意,即如何判断是否为连通图。
③判断方法是为每个点设一个点集个数,初始一定是每个点自己是一个,随着并查集集合的合并,连通图点集的数量会增加。
④最后找第一个点的父亲所在的集合中点的数量是否为n,即可判断是否为连通图。
代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 1005