即利用并查集:

代码:

#include<iostream>
using namespace std;
int bin[1001];
int find(int x)
{
    int r=x;
    while(r!=bin[r])
    {
        r=bin[r];
    }
    return r;
}

void memge(int x,int y)
{
    x=find(x);
    y=find(y);
    if(x!=y)
      bin[x]=y;
}
int main()
{
    int n,m,x,y;
    int i,count;
    while(cin>>n&& n)
    {
        for(i=1;i<=n;i++)
          bin[i]=i;
        cin>>m;
        for(m;m>0;m--)
        {
            cin>>x>>y;
            memge(x,y);
        }
        for(count=-1,i=1;i<=n;i++)
        {
            if(bin[i]==i)
              count++;
        }
        cout<<count<<endl;
    }
    return 0;
}

 

posted on 2012-07-28 10:00  xinmenghuairi  阅读(202)  评论(0编辑  收藏  举报