并查集判断环数,裸题
代码如下:
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;
}
}