1 #include <stdio.h>
2 #include <stdlib.h>
3 int n,m;//并查集。
4 int a[100000];
5 void creat()//用来给每个单位赋值的,每个单位的值代表他们的上一级。
6 {
7 int i;
8 for(i=1; i<=n; i++)
9 {
10 a[i]=i;
11 }
12 return;
13 }
14 int find(int x)//寻找上一级的上一级,知道找到幕后黑手。
15 {
16 if(a[x]==x)return x;
17 else
18 {
19 a[x]=find(a[x]);
20 }
21 return a[x];
22 }
23 void merge(int x,int y)//讲两个组织合并,评判出一个老大。
24 {
25 int t1,t2;
26 t1=find(x);
27 t2=find(y);
28 if(t1==t2);
29 else a[t2]=t1;
30 return;
31 }
32 int main()
33 {
34 int i,c,b,sum;
35 while(~scanf("%d %d",&n,&m))
36 {
37 creat();
38 sum=0;
39 for(i=1; i<=m; i++)
40 {
41 scanf("%d %d",&c,&b);
42 merge(c,b);
43 }
44 for(i=1; i<=n; i++)//如果这个组织的上一级就是他自己的话就代表他是一个老大,并计数。
45 {
46 if(a[i]==i)sum++;
47 }
48 printf("%d\n",sum);
49 }
50 return 0;
51 }