使用并查集判断无向图是否连通

来源:互联网 发布:淘宝达人报名入口 编辑:程序博客网 时间:2024/05/10 10:19

以下代码是使用并查集判断无向图是否连通

#include<bits/stdc++.h>                     //无向图使用并查集判断是否连通 using namespace std;const int maxn=1e5+10;int par[maxn];void init(int n){    for(int i=0;i<n;i++)    par[i]=i;}int find(int v){    return par[v]=(par[v]==v? v:find(par[v]));}int main(){    int n,m;                            //n个结点m条边     scanf("%d%d",&n,&m);    init(n);    for(int i=0;i<m;i++)    {        int a,b;        scanf("%d%d",&a,&b);        a--,b--;        par[find(a)]=par[find(b)];                //属于同一个根     }    int cnt=0;    for(int i=0;i<n;i++)    {        if(par[i]==i)                        //根结点         cnt++;                               //根结点个数     }    if(cnt==1)    printf("Yes");    else    printf("No");} 
1 0
原创粉丝点击