题目描述
输入
输出
示例输入
2 3 1 1 2 3 2 1 2 2 3
示例输出
1 0
#include <stdio.h>
#include <string.h>
int pre[10000000];
int find(int x)
{
int r=x;
while(pre[r]!=r)
r=pre[r];
return r;
}
void join(int x,int y)
{
int fx=find(x),fy=find(y);
if(fx!=fy)
pre[fx]=fy;
}
int main()
{
int t,n,m,a,b;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&n,&m);
int total=n-1;
for(int i=1;i<=n;i++)
pre[i]=i;
for(int j=1;j<=m;j++)
{
scanf("%d %d",&a,&b);
join(a,b);
}
for(int i=1;i<=n;i++)
{
if(pre[i]!=i)
total--;
}
printf("%d\n",total);
}
return 0;
}
1万+



被折叠的 条评论
为什么被折叠?



