并查集的思想,只要有相关关系的要坐在一起,设计到find函数和nuion函数的相关功能构建。
#include <iostream>
#include <fstream>
#include <memory.h>
using namespace std;
int cat[1002];
int N,M,count;
void initial(int n)
{
for(int i = 1;i <= n;i ++)
cat[i] = i;
}
int find(int n)
{
return (cat[n] == n ? n :find(cat[n]));
}
void unit(int n1,int n2)
{
int x = find(n1);int y = find(n2);
if(x == y) return;//这是总共有N棵树,按照程序执行,先判断的是不成立的情况,很显然要进行count--操作,并联在一起,
count --; //而不同的情况则是存在与上面基础之上,该数据已经处理过,而此时没有进行count--的
cat[y] = x; //必要
}
int main()
{
//ifstream cin("in.txt");
int T;
cin >> T;
while(T --)
{
memset(cat,0,sizeof(cat));
cin >> N >> M;
initial(N);
count = N;
int temp1,temp2;;
for(int i = 1;i <= M;i ++)
{
cin >> temp1 >> temp2;
unit(temp1,temp2);
}
cout << count << endl;
}
return 0;
}