How Many Tables:
这道题考察的是我们的并查集:
只需要将有联系的人的根节点连在一起就可以很轻松的写出程序。
代码如下:
#include <iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int father[2020];
int number;
int f(int root)
{
int son, tmp;
son = root;
while(root != father[root])
root = father[root];
while(son != root)
{
tmp = father[son];
father[son] = root;
son = tmp;
}
return root;
}
void hebing(int x,int y)
{
int fatherx;
int fathery;
fatherx=f(x);//获取根节点
fathery=f(y);//获取根节点
if(fatherx<fathery)
{
father[fathery]=fatherx;
number--;
}
if(fathery<fatherx)
{
father[fatherx]=fathery;
number--;
}
}
int main()
{
int t;
int n,m;
int a1,a2;
cin>>t;
while(t--)
{
cin>>n>>m;
number=n;
for(int i=1;i<=n;i++)
father[i]=i;
for(int j=0;j<m;j++)
{
cin>>a1>>a2;
hebing(a1,a2);
}
cout<<number<<endl;
}
return 0;
}