题目:找出犯罪团伙数目
第一行输入n,m,n表示强盗的人数,m表示有m条线索,(线索中包含强盗的同伙信息)
参见样例输入第二行,1 2表示1号强盗和2号强盗是同伙
样例输入:
10 9
1 2
3 4
5 2
4 6
2 6
8 7
9 7
1 6
2 4
样例输出:
3
代码实现:
#include<bits/stdc++.h>
using namespace std;
int father[100005]={0};
//查
int findd(int x)
{
if(x == father[x]) return x;
else father[x] = findd(father[x]);
return father[x];
}
//并
void join(int x,int y)
{
int fx = findd(x);
int fy = findd(y);
if(fx != fy) father[fy] = fx;
}
int main()
{
int n,m,a,b;
scanf("%d%d",&n,&m);
//初始化
for(int i = 0;i <n;i++)
{
father[i] = i;
}
for(int i= 0 ;i<m;i++)
{
scanf("%d%d",&a,&b);
join(a,b);
}
int cnt=0;
for(int i=0;i< n;i++)
{
if(i == father[i]) cnt++;
}
cout<<cnt<<endl;
}