标签:
8 9 0 1 1 3 2 3 0 2 4 5 5 7 6 7 4 6 4 7 2 1 0 1 0 0
2 1 1 0
ac代码
#include<stdio.h>
#include<string.h>
int pre[100010],dig[100010];
int n,m;
/*int find(int x)
{
int r=x;
while(r!=pre[r])
r=pre[r];
int j,k;
j=x;
while(j!=r)
{
k=pre[j];
pre[j]=r;
j=k;
}
return r;
}*/
int main()
{
while(scanf("%d%d",&n,&m)!=EOF,n||m)
{
//init();
//memset(dig,0,sizeof(dig));
int i,j;
for(i=1;i<=n;i++)
{
pre[i]=i;
dig[i]=0;
}
for(i=0;i<m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
u++;v++;
dig[u]++;
dig[v]++;
//memge(u,v);
int fa=u;
while(fa!=pre[fa])
fa=pre[fa];
int fb=v;
while(fb!=pre[fb])
fb=pre[fb];
if(fa!=fb)
{
if(fa<fb)
{
pre[fb]=fa;
}
else
pre[fa]=fb;
}
}
int ans1=0,ans2=0;
for(i=1;i<=n;i++)
{
if(pre[i]==i)
{
ans1++;
}
}
for(i=1;i<=n;i++)
{
if(dig[i]!=2)
{
int fi=i;
while(fi!=pre[fi])
{
fi=pre[fi];
}
pre[fi]=0;//设为-1会超时,,,,,
}
}
for(i=1;i<=n;i++)
{
if(pre[i]==i)
ans2++;
}
printf("%d %d\n",ans1,ans2);
}
}
HDOJ 题目Graph’s Cycle Component(并查集)
标签:
原文地址:http://blog.csdn.net/yu_ch_sh/article/details/44514237