并查集判断环数,裸题
代码如下:
hdoj 2120 Ice_cream's world I 【并查集判断成环数】
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int pre[1100],sum=0;
void init(int n)
{
int i;
for(i=0;i<=n;i++)
{
pre[i]=i;
}
}
int findd(int x)
{
int r=x;
while(r!=pre[r])
{
r=pre[r];
}
int i=x,j;
while(i!=r)
{
j=pre[i];
pre[i]=r;
i=j;
}
return r;
}
void bing(int x,int y)
{
int tx,ty;
tx=findd(x);
ty=findd(y);
if(tx!=ty)
{
pre[ty]=tx;
}
else
{
sum++;
}
}
int main ()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
sum=0;
init(n);
while(m--)
{
int xx,yy;
cin>>xx>>yy;
bing(xx,yy);
}
cout<<sum<<endl;
}
}
本文介绍了一种使用并查集算法来判断图中环的数量的方法。通过初始化并查集,寻找元素的根节点,并将属于同一集合的节点进行合并,从而统计环的数量。
1068

被折叠的 条评论
为什么被折叠?



