标签:
2 5 3 1 2 2 3 4 5 5 1 2 5
2 4
解法:就是基础的并查集。。。
代码:
1 #include <iostream> 2 #include <string.h> 3 #include <stdio.h> 4 #include <map> 5 using namespace std; 6 int ID[10086]; 7 void Cread(int N) 8 { 9 for(int i=0;i<=N;i++)ID[i]=i; 10 } 11 int Find(int x) 12 { 13 int tmp; 14 if(ID[x]!=x)tmp=Find(ID[x]); 15 else tmp=x; 16 ID[x]=tmp; 17 return tmp; 18 } 19 int main() 20 { 21 int N,M,i,j,k,T; 22 scanf("%d",&T); 23 while(T--) 24 { 25 scanf("%d%d",&N,&M); 26 Cread(N); 27 int a,b; 28 int sign=0; 29 for(i=0;i<M;i++) 30 { 31 scanf("%d%d",&a,&b); 32 a=Find(a); 33 b=Find(b); 34 if(a!=b) 35 { 36 sign++; 37 ID[a]=b; 38 } 39 } 40 printf("%d\n",N-sign); 41 } 42 return 0; 43 }
标签:
原文地址:http://www.cnblogs.com/LWF5201314614/p/4693322.html