题目连接:
题解:
普通的并查集 没什么特别的 下面看代码
#include<stdio.h> #include<iostream> 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; }
时间: 2024-11-08 17:50:49