解题思路:此题属于并查集中基础题目,进行完初始化,查根,合并后再统计出共有多少人是集合中的即可。
此题不难但是第一次没运行出来,一直显示编译错误,整体思路没错,主要原因是对整体变量的把握不熟练。下面是错误代码:`
#include<iostream>
using namespace std;
int pre[1010];
void init()
{
for(int i=0;i<1010;i++)
pre[i]=i;
}
int find(int x)
{
if(x==pre[x])
return x;
else
return find(pre[x]);
}
void merge(int x,int y)
{
int e,f,count;
e=find(x);
f=find(y);
if(e!=f)
{
pre[f]=e;
count++;
}
}
int main()
{
int k,n,m,a,b;
cin>>k;
for(int i=0;i<k;i++)
{
count=0;
cin>>n>>m;
init();
for(int j=0;j<m;j++)
{
cin>>a>>b;
merge(a,b);
}
cout<<n-count<<endl;
// if(i!=k-1)
// cout<<endl;
}
return 0;
}`
首先使用count是在主函数中进行归零,count是在merge函数中定义的,而count归零在调用merge函数之前,这就造成了整个不能运行,形成编译错误。以后要习惯