2805=大家快来A水题

 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 }

猜你喜欢

转载自www.cnblogs.com/Angfe/p/10543828.html