hdu 1213 并查集入门

来源:互联网 发布:淘宝的人工客服在哪 编辑:程序博客网 时间:2024/05/22 17:40

题目链接:点击打开链接

题目分析:并查集入门训练

题目总结:模版。注意代码风格

#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>using namespace std;int id[1005],siz[1005],n,m,ans;void init(){    for(int i=1; i<=n; i++)    {        id[i]=i,siz[i]=1;    }}int find(int a){    int p=a;    while(a!=id[a])    {        a=id[id[a]];//用爷爷的id来压缩路径        p=a;    }    return p;}void unin(int a,int b){    int i,j;    i=find(a),j=find(b);    if(i==j) return;     if(siz[i]<siz[j])//每个集合的大小清楚了更便于合并,或者合并更优化    {        id[i]=j;        siz[j]+=siz[i];    }    else    {        id[j]=i;        siz[i]+=siz[j];    }    ans--;}int main(){    int t,i,a,b;    scanf("%d",&t);    while(t--)    {         scanf("%d%d",&n,&m);        init();        ans=n;        for(i=1; i<=m; i++)        {            scanf("%d%d",&a,&b);            unin(a,b);        }        printf("%d\n",ans);    }    return 0;} 


0 0
原创粉丝点击