题目连接:
题解:
普通的并查集 没什么特别的 下面看代码
#include#include using namespace std;int bin[50010];int findx(int x){ return x == bin[x]?bin[x]:(bin[x] = findx(bin[x]));}int main(){ int n,m; int cas = 1; while(scanf("%d%d",&n,&m)&&m||n) { for(int i = 1;i <= n;i++) { bin[i] = i; } for(int i = 0;i < m;i++) { int a,b; scanf("%d%d",&a,&b); int fx,fy; fx = findx(a); fy = findx(b); if(fx != fy) { bin[fx] = fy; } } int sum = 0; for(int i = 1;i <= n;i++) { if(bin[i] == i) { sum++; } } printf("Case %d: %d\n",cas++,sum); } return 0;}