标签:
水题并查集。合并相同颜色的球,求不同集合数量。
#include<cstdio> const int maxn=10010; int r[maxn],n,m,ans,T; void init() { for(int i=0;i<=n;i++) r[i]=i,num[i]=1; } int root(int a) { if(r[a]==a) return a; return r[a]=root(r[a]); } void merge(int a,int b) { int ra=root(a),rb=root(b); if(ra!=rb) { ans--; r[ra]=rb; } } int main() { int a,b; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); init(); ans=n; while(m--) { scanf("%d%d",&a,&b); merge(a,b); } printf("%d\n",ans); } return 0; }
标签:
原文地址:http://blog.csdn.net/u011032846/article/details/42782365