判断图的连通性

Posted Dysania_l

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断图的连通性相关的知识,希望对你有一定的参考价值。

并查集写法:

#include<bits/stdc++.h>
using namespace std;
const int M = 2e5+10;
int f[M];
int find(int x){
    return x == f[x]?x:(f[x]==find(f[x]));  //递归查找集合的代码
}

void mix(int x,int y){
    int fx = find(x);
    int fy = find(y);
    if(fx != fy)
       f[fx] = fy;
}

int main()
{
    int n,m,x,y;
    cin>>n>>m;
    for(int i = 1;i <= n;i ++)
        f[i] = i;
    for(int i = 0;i < m;i ++){
        cin>>x>>y;
        mix(x,y);
    }
    int ans = 0;
    for(int i = 1;i <= n;i ++){
        if(i == f[i])
            ans++;
    }
    if(ans==1)
        cout<<"yes"<<endl;
    else
        cout<<"no"<<endl;
    return 0;
}

 

以上是关于判断图的连通性的主要内容,如果未能解决你的问题,请参考以下文章

Tarjan算法与割点割边

天梯赛 L2-013. 红色警报 图的连通性

图的连通性

图的连通性:强连通-Tarjan算法

图的连通性算法

10.4图的连通性(Connectivity)