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

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

#include                     //无向图使用并查集判断是否连通 
using namespace std;
const int maxn=1e5+10;
int par[maxn];
void init(int n)
{
    for(int i=0;iint 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;iint a,b;
        scanf("%d%d",&a,&b);
        a--,b--;
        par[find(a)]=par[find(b)];                //属于同一个根 
    }
    int cnt=0;
    for(int i=0;iif(par[i]==i)                        //根结点 
        cnt++;                               //根结点个数 
    }
    if(cnt==1)
    printf("Yes");
    else
    printf("No");
} 

你可能感兴趣的:(模版,并查集)