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 3
Sample Output
2 0
#include <stdio.h> #include <stdlib.h> int set[100005]; int jihe(int x)//此处为路径压缩 { int r; r=x; while(r!=set[r]) { r=set[r]; } int k,y=x; while(y!=r) { k=set[y]; set[y]=r; y=k; } return r; } void merge(int x,int y)//合并 { int a,b; a=jihe(x);b=jihe(y); if(a!=b) set[b]=a; } int main() { int n,m,a,b; int i,j; while(~scanf("%d%d",&n,&m)) { for(i=0;i<n;i++) set[i]=i; while(m--) { scanf("%d%d",&a,&b); merge(a,b); } j=0; for(i=1;i<n;i++) { if(jihe(0)==jihe(i)) j=j+1; } printf("%d\n",j); } return 0; }