2 5 3 1 2 2 3 4 5 5 1 2 5Sample Output
2 4
#include <iostream> #include <cstdio> #include <queue> using namespace std; int n , m ; int f[1001] ; void init() { for(int i = 1 ; i <= n ; i++) { f[i] = i ; } } int getf(int x) { if(f[x] != x)f[x]=getf(f[x]); return f[x] ; } int merge(int x,int y) { f[getf(y)]=getf(x); } int main() { int T,x,y,c; scanf("%d" , &T); while(T--) { c=0; scanf("%d%d",&n,&m); init(); for(int i = 1 ; i <= m ; i++) { scanf("%d %d",&x,&y); merge(x,y); } for(int i = 1 ; i <= n ; i++) if(f[i]==i)c++; printf("%d\n",c); } }
原文:http://www.cnblogs.com/8023spz/p/7224875.html