HDU1213 How Many Tables(简单的并查集)

来源:互联网 发布:数控车床编程操作方法 编辑:程序博客网 时间:2024/06/05 02:50

   找了个简单的并查集题目练手,对并查集复习了一遍,留个模板作为备忘。

   点击打开链接

#include <iostream>#include <string>using namespace std;int father[1010],a,b,visit[1010];int find(int x){    if(x!=father[x])        father[x]=find(father[x]);    return father[x];}void mere(int x,int y){    x=find(x);    y=find(y);    father[y]=x;}int main(){    int i,m,n,t,j,a,b;    cin>>t;    while(t--)    {        int count=0;        memset(visit,0,sizeof(visit));        cin>>n>>m;        for(i=1;i<=n;i++)            father[i]=i;        for(i=1;i<=m;i++)        {            cin>>a>>b;            a=find(a);            b=find(b);            if(a!=b)                mere(a,b);        }        for(i=1;i<=n;i++)        {            if(visit[i])                continue;        //    visit[i]=1;            for(j=i+1;j<=n;j++)            {                if(!visit[j]&&find(i)==find(j))                {                    visit[j]=1;                }            }            count++;        }        cout<<count<<endl;    }    return 0;}


原创粉丝点击