hdu1232最水并查集模版题

求集合的个数

#include <cstdlib>

#include <iostream>

#include<stdio.h>

using namespace std;

const int MAXN=1003;

int p[MAXN];

int find(int i)

{

    if(p[i]!=i)

    {

        return p[i]=find(p[i]);

    }else

    {

        return i;

    }

}

void connect(int a,int b)

{

    int f1=find(a);

    int f2=find(b);

    if(f1>f2)

    {

        p[f1]=f2;

    }else if(f1<f2)

    {

        p[f2]=f1;

    }

}

int main(int argc, char *argv[])

{

    int n,m;

    while((cin>>n)&&(n!=0)&&(cin>>m))

    {

        int i=0;

        int sum=0;

        for(i=1;i<=n;i++)

        {

            p[i]=i;

        }

        for(i=0;i<=m-1;i++)

        {

            int a,b;

            scanf("%d%d",&a,&b);

            connect(a,b);

        }



        for(i=n;i>=1;i--)

        {

            if(find(i)==i)

            {

                sum++;

            }

        }

        cout<<sum-1<<endl;

    }

    //system("PAUSE");

    return EXIT_SUCCESS;

}

  

你可能感兴趣的:(HDU)