#include <bits/stdc++.h>
using namespace std;
const int maxn=1e6;
int parent[maxn],ranc[maxn];
int serc(int pos)
{
while(parent[pos]!=pos)
{
pos=parent[pos];
}
return pos;
}
void init(int siz)
{
for(int i=0;i<siz;i++)
{
parent[i]=i;
ranc[i]=1;
}
}
void merg(int x,int y)
{
x=serc(x);
y=serc(y);
if(ranc[x]<ranc[y])
parent[x]=parent[y];
else
{
if(ranc[x]==ranc[y])ranc[x]++;
parent[y]=parent[x];
}
}
void compress(int pos)
{
int tpos=serc(pos);
int cur;
while(parent[pos]!=pos)
{
cur=parent[pos];
parent[pos]=tpos;
pos=cur;
}
}
int main()
{
int t,m,n,cur1,cur2;
cin>>t;
while(t--)
{
cin>>n>>m;
init(n);
for(int i=0;i<m;i++)
{
cin>>cur1>>cur2;
merg(cur1-1,cur2-1);
}
int sum=0;
for(int i=0;i<n;i++)
{
if(parent[i]==i)sum++;
}
cout<<sum<<endl;
}
return 0;
}
hdu1213--並查集入門題
題意:求一共有多少不相交的集合
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.