题目
题解思路
直接上并查集模板,初始化答案为 n ,每次合并的时候自减,最后输出就是正确答案了。
可以理解为 每次合并一个人省了一条凳子 。一开始大家没有合并所以为 n 。
AC代码
#include <iostream>
using namespace std;
int a[1010];
int ans ;
int n,m;
int find2(int x)
{
int r = x,t;
while(r != a[r])
r = a[r] ;
while( x != a[x] )
{
t = a[x] ;
a[x] = r;
x = t ;
}
return r;
}
void uio (int x,int y)
{
int fx = find2(x);
int fy = find2(y);
if ( fx != fy )
{
a[fy] = fx;
ans--;
find2(y);
}
}
int main ()
{
int t;
cin>>t;
while(t--)
{
cin>>n>>m;
ans = n;
for (int i = 1 ;i <= n ;i++ )
a[i] = i;
for (int i = 1 ;i <= m ;i++ )
{
int a,b;
cin>>a>>b;
uio(a,b);
}
cout<<ans<<"\n";
}
return 0;
}