Description
众所周知,英语四六级考试有几套不同的试卷,而且,为了防止我们抄袭旁边同学的,一般附近同学的试卷和你的试卷不一样。但是,我们还是知道了一些同学的试卷是相同的,假设有n个同学,编号为0~n-1,你的编号为0,,根据我们已知的信息,求还有多少人的试卷和你的试卷是相同的。Input
多组输入,每组第一行,有两个整数n,m(2 <= n <= 100000, 0 <= m <= 10000),代表n个同学,m条我们已知的信息。接下来m行,每行有两个整数a,b(0 <= a,b <= n-1)。代表a同学和b同学的试卷是相同的。Output
每组输出一行,输出和你的试卷相同的同学的个数。
Sample Input
5 2 0 1 1 2 5 2 1 2 2 3Sample Output
2 0
#include <iostream>
#include"cstdio"
#include"cstring"
#include"cstdlib"
using namespace std;
int bin[100050];
int m,n;
int findx(int x)
{
if(bin[x]!=x)
bin[x]=findx(bin[x]);
return bin[x];
}
void Merge (int x,int y)
{
int fx=findx(x);
int fy=findx(y);
if(fx!=fy)
bin[fx]=fy;
}
int main()
{
while(~scanf("%d%d",&m,&n))
{memset(bin,'\0',sizeof(bin));
for(int i=0;i<m;i++)
bin[i]=i;
for(int i=0;i<n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
Merge(x,y);
}
int cou=0,i;
for(i=1;i<m;i++)
if(findx(i)==findx(0))
cou++;
printf("%d\n",cou);
}
return 0;
}