poj2524

来源:互联网 发布:java音乐网站 编辑:程序博客网 时间:2024/04/30 18:54

裸并查集

直接改的模板

#include <iostream>#include <cstring>#include <cstdio>using namespace std;int n,m,f,t,s[50005],rank[50005];int find(int x){    if(s[x]!=x)        return s[x]=find(s[x]);    return x;}void un(int a,int b){    int x=find(a);    int y=find(b);    if(x!=y)    {        s[y]=x;//或者直接在这里统计连通图个数    }}int main(){    int casen=0;    while(scanf("%d%d",&n,&m)&&(n||m))    {        for(int i=0; i<n; i++)        {            s[i]=i;        }        for(int i=0; i<m; i++)        {            scanf("%d%d",&f,&t);            un(f,t);        }        memset(rank,0,sizeof(rank));        for(int i=0; i<n; i++)        {            rank[find(s[i])]=1;//find到所有的根节点,标记为1,用于统计连通图的个数        }        int sum=0;        for(int i=0; i<n; i++)            if(rank[i]==1)                sum++;        printf("Case %d: %d\n",++casen,sum);    }    return 0;}


0 0