时间限制: 1 Sec 内存限制: 128 MB
提交: 486 解决: 193
[提交][状态][讨论版]
题目描述
【题意】
n个人,m条关系(x,y),表示x和y是同一家族的。
求最多可能有多少个家族。
(n<=100000,m<=1000000)
【输入格式】
第一行两个整数n和m(n<=100000,m<=1000000)
下来m行,每行两个整数x、y(1<=x,y<=n),表示一条关系.
【输出格式】
输出一个整数,表示最多可能有多少个家族。
【样例输入】
5 3
1 2
2 4
3 4
【样例输出】
2
并查集。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
using namespace std;
int n,m,k[5010000],s;
int find(int x)
{
if(x==k[x]) return x;
else return k[x]=find(k[x]);
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
k[i]=i;
int x,y;
for(int i=1;i<=m;i++)
{
cin>>x>>y;
int fx=find(x);
int fy=find(y);
if(fx!=fy)
k[find(fx)]=fy;
}
for(int i=1;i<=n;i++)
if(k[i]==i)
s++;
cout<<s;
return 0;
}