思路:
- 非常质朴的并查集啦,求有几个联通块,最后头为 -1 的元素个数就是呗。
代码:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn = 1005;
int N,M;
int ans;
int par[maxn];
void INIT(){
memset(par , -1 , sizeof(par));
ans = 0;
return ;
}
int FIND(int i){
return par[i] == -1 ? i : par[i] = FIND(par[i]);
}
void UNION(int l,int r){
int parl = FIND(l);
int parr = FIND(r);
if(parr != parl)
par[parr] = parl;
return ;
}
int main(){
int T;cin>>T;
while(T--){
INIT();
scanf("%d%d" , &N , &M);
while(M--){
int l,r;
scanf("%d%d" , &l , &r);
UNION(l , r);
}
for(int i=1;i<=N;i++)
if(par[i] == -1)
ans++;
printf("%d\n" , ans);
}
return 0;
}