hdu 1213 how many tables

并查集的简单应用,数组开了1010个,初始化却用到了set[1010];交了好几次,都是运行错误。

#include<iostream>
using namespace std;

int set[1020];

int find(int x)
{
    int r= x;
    while(set[r] != r)
      r= set[r];
    //int i =x;
    /*while(i!= r)
    {
        int j =set[i];
        set[i] = r;
        i =j;
    }*/
    return r;
}

void merge(int a,int b)
{
    a= find(a);
    b= find(b);
    /*if(a< b)*/
    if(a!= b)
    set[b] = a;
    //else set[a] = b;
}

int main()
{
    int a;
    cin >> a;
    while(a--)
    {
        int count =0;
        for(int i =1;i<= 1010; i++)set[i] = i;
        int b,c;
        cin >> b>> c;
        while(c--)
        {
            int x,y;
            cin>> x>>y;
            merge(x,y);
        }
        for(int i =1; i<=b;i++)
        {
            if(set[i] == i)
              count++;
        }
        cout<< count<< endl;
    }
    return 0;
}
posted @ 2014-07-24 16:36  TK在颤抖  阅读(97)  评论(0编辑  收藏  举报