poj--2524

来源:互联网 发布:淘宝联盟加入购物车 编辑:程序博客网 时间:2024/05/21 09:56

一道简单的并查集


#include<iostream>#include<cstdio>#include<cstring>using namespace std;int fa[55000];int find(int x){   return fa[x]==x?x:fa[x]=find(fa[x]);} void join(int x,int y){     int fx=find(x);     int fy=find(y);     if(fx!=fy)        fa[fx]=fy;}int main(){    int n,m,i,j,Case=0;    while(scanf("%d%d",&n,&m)&&n)    {         for(i=1;i<=n;i++)             fa[i]=i;         for(i=0;i<m;i++)         {             int k1,k2;             scanf("%d%d",&k1,&k2);             join(k1,k2);         }         int cnt=0;         for(i=1;i<=n;i++)            if(find(i)==i)               cnt++;        printf("Case %d: %d\n",++Case,cnt);    }  return 0;}


0 0