0
点赞
收藏
分享

微信扫一扫

ACM模板——无向图连通判断法(或求连通分支个数) - 并查集


#include<bits/stdc++.h>
#include<cmath>

#define mem(a,b) memset(a,b,sizeof a);
#define INF 0x3f3f3f3f

using namespace std;

typedef long long ll;

const int maxn=1010;

int n,m;
int pre[maxn];

void init()
{
for(int i=1;i<=n;i++) pre[i]=i;
}

int find(int x)
{
return pre[x]==x?x:pre[x]=find(pre[x]);
}

int main()
{
while(~scanf("%d%d",&n,&m))
{
init();
int u,v;
for(int i=0;i<m;i++)
{
scanf("%d%d",&u,&v);
pre[find(u)]=pre[find(v)]; // 合并为同一个根
}

int cnt=0;
for(int i=1;i<=n;i++) // 统计 root 结点个数
if(pre[i]==i)
{
cnt++;
if(cnt>1) break;
}

puts(cnt==1?"YES":"NO");
}

return 0;
}


举报

相关推荐

0 条评论