POJ-2524-Ubiquitous Religions
这题是并查集,然后没有什么弯弯绕。
#include <cstdio>
const int maxn=50005;
int pre[maxn];
int find(int x)
{
if (pre[x]==x)
return x;
return pre[x]=find(pre[x]);
}
void unions(int a,int b)
{
int x=find(a);
int y=find(b);
if (x!=y)
pre[x]=y;
}
int main()
{
int n,m,a,b,k=1;
while (scanf("%d%d",&n,&m)&&m+n) {
for (int i=0;i<=n;i++) {
pre[i]=i;
}
while (m--) {
scanf("%d%d",&a,&b);
unions(a,b);
}
int cnt=0;
for (int i=1;i<=n;i++) {
if (pre[i]==i)
cnt++;
}
printf("Case %d: %d\n",k++,cnt);
}
return 0;
}

浙公网安备 33010602011771号