Ice_cream's world I HDU

              ice_cream's world is a rich country, it has many fertile lands. Today, the queen of ice_cream wants award land to diligent ACMers. So there are some watchtowers are set up, and wall between watchtowers be build, in order to partition the ice_cream’s world. But how many ACMers at most can be awarded by the queen is a big problem. One wall-surrounded land must be given to only one ACMer and no walls are crossed, if you can help the queen solve this problem, you will be get a land.InputIn the case, first two integers N, M (N<=1000, M<=10000) is represent the number of watchtower and the number of wall. The watchtower numbered from 0 to N-1. Next following M lines, every line contain two integers A, B mean between A and B has a wall(A and B are distinct). Terminate by end of file.OutputOutput the maximum number of ACMers who will be awarded. 
One answer one line.Sample Input:

8 10
0 1
1 2
1 3
2 4
3 4
0 5
5 6
6 7
3 6
4 7

Sample Output:

3
寻找集合中环的个数!
 1 #include<cstdio>
 2 #include<string>
 3 #include<iostream>
 4 #include<algorithm> 
 5 #define MAX 1005
 6 using namespace std;
 7  
 8 int fa[MAX];
 9 int N,M,cnt;
10 
11 int find(int u)
12 {   if(u!=fa[u]) fa[u]=find(fa[u]);
13     return fa[u];    
14 }
15 
16 void Union(int a,int b)
17 {   if(find(a)==find(b)) cnt++;
18     else fa[find(b)]=find(a);
19 }
20 
21 int main()
22 {   int k,n,m;
23     while(cin>>N>>M)
24     {   for(int i=0;i<=MAX;i++) fa[i]=i;  
25         for(k=0;k<M;k++)
26         {   scanf("%d%d",&n,&m);
27             Union(n,m);
28         }
29         cout<<cnt<<endl;
30         cnt=0;
31     }
32 }
原文地址:https://www.cnblogs.com/zgglj-com/p/6485166.html