HDU 1213 How Many Tables

一道水题,运用并查集,每2个人认识,就放到一个集合里。最后统计集合的个数。

#include <iostream>
#include <set>
using namespace std;
int cdata[10000];
int k_find(int i)
{
 if (cdata[i] == i)
  return i;
 else
  return cdata[i] = k_find(cdata[i]);
}
void he_bing(int a, int b)
{
 int k1 = k_find(a);
 int k2 = k_find(b);
 if (k1 != k2)
  cdata[k2] = k1;
}
int main()
{
 int i;
 cin >> i;
 while (i--)
 {
  int s;
  int a, b;
  int n, m;
  int isum = 0;
  cin >> n >> m;
  for (s = 1; s <= n; s++)
  {
   cdata[s] = s;
  }
  for (s = 1; s <= m; s++)
  {
   cin >> a >> b;
   he_bing(a,b);
  }
  for (s = 1; s <= n; s++)
  {
   if (cdata[s] == s)
    isum++;
  }
  cout << isum << endl;
 }
}

你可能感兴趣的:(算法,并查集)