题目链接:
点击打开链接
基础并查集,计算有多少区间。
#include<stdio.h>
int v[1005];
int find(int x)//查找
{
if(x!=v[x])
{
x=find(v[x]);
}
return x;
}
void make(int a,int b)//合并
{
int x;
int y;
x=find(a);
y=find(b);
if(x<=y)
v[y]=x;
else
v[x]=y;
}
int main()
{
int n,m,t,i,a,b,count;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
v[i]=i;
for(i=1;i<=m;i++)
{
scanf("%d %d",&a,&b);
make(a,b);
}
count=0;
for(i=1;i<=n;i++)
if(v[i]==i)
count++;
printf("%d\n",count);
}
return 0;
}