ACM_HDU 1213 How Many Tables(基础并查集)

来源:互联网 发布:二战 日本 知乎 编辑:程序博客网 时间:2024/05/16 11:16
#include<iostream>#define NN 1000int ranka[NN];using namespace std;struct node    {        int pre;       }p[NN]; void Init(int n)    {       for(int i=1;i<=n;i++)        {            p[i].pre=i;            ranka[i]=1;        }    }  int find(int x)    {        return x == p[x].pre ? x : find(p[x].pre);    }  void join(int x,int y)    {        x=find(x);        y=find(y);        if(x==y)return;        if(ranka[x]>=ranka[y])        {            p[y].pre=x;            ranka[x]=ranka[x]+ranka[y];        }else        {            p[x].pre=y;            ranka[y]=ranka[y]+ranka[x];        }    }     int main(void){int t,M,N,num,a,b,number;cin>>num;for(int i = 0;i < num;i++){cin>>N>>M;Init(N);for(int j = 0;j < M;j++){cin>>a>>b;join(a,b);}number = 0;for(int m = 1;m <= N;m++){if(p[m].pre==m)   //数根节点的个数的办法。number++;  }cout<<number<<endl;}return 0; } 
rank仿佛是标准库的一个自留词,不能用这个名字。
0 0
原创粉丝点击