题目大意:
让你输入n,m,n代表有n个人,m代表有m组表示其关系的数据,最后要求输出,能够把这n个点分为几组,注意,如果a与b有关系,b与c有关系,那么a与c也有关系。
解题思路:
直接用并查集查找就行了,查找分为几组。
代码:
#include
using namespace std;
const int MAX=1005;
int pre[MAX];
int find(int x)
{
int r=x;
while(pre[r]!=r)
{
r=pre[r];
}
//r此刻为根节点
while(pre[x]!=r)//x值随便改变,优化,一个一个拿去接根节点
{
int j=pre[x];
pre[x]=r;
x=j;
}
return r;//返回根节点
}
void init()
{
for(int i=1;i>cas;
while(cas--)
{
cin>>n>>m;
init();
for(i=0;i>a>>b;
int f1=find(a);
int f2=find(b);
if(f1!=f2)
pre[f2]=f1;
}
int count=0;
for(j=1;j<=n;j++)
{
if(pre[j]==j)
count++;
}
cout<