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 }