#include<iostream>
using namespace std;
int fa[10000];
void unit() //集合初始化,父节点为其本身
{
for(int i=0; i<10000; i++)
fa[i]=i;
}
int find(int v) //查找v的根节点
{
if(fa[v]==v) return v;
return fa[v]=find(fa[v]);
}
int is_same(int a, int b) //判断两个元素是否在同一集合里
{
int fx=find(a);
int fy=find(b);
return (fx==fy);
}
void _union(int a, int b) //若a,b不是同一集合的元素,则将他们归为同一集合
{
int fx=find(a);
int fy=find(b);
if(fx!=fy) fa[fy]=fx;
}
int main()
{
int t, n, m, u, v;
cin >> t;
while(t--)
{
int count=0;
unit();
cin >> n >> m;
for(int i=0; i<m; i++)
{
cin >> u >> v;
_union(u, v);
}
for(int i=0; i<n; i++)
if(fa[i]==0) count++;
cout << count << endl;
}
return 0;
}
并查集—Hrbustoj 1073 病毒
最新推荐文章于 2021-02-22 13:30:14 发布