1092: 并查集模版

1092: [视频]并查集(模版 家族)
时间限制: 1 Sec 内存限制: 128 MB
提交: 403 解决: 176
[提交][状态][讨论版]
题目描述

【题意】
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
using namespace std;
int father[100005];
int find_father(int x)
{
    if (father[x]==x) return x;
    else
    {
        father[x]=find_father(father[x]);
        return father[x];
    }
}
int main()
{
    int n,m,sum=0,a,b;
    cin>>n>>m;
    for (int i=0;i<=n;i++) father[i]=i;
    for (int i=0;icin>>a>>b;
        int fa=find_father(a);
        int fb=find_father(b);
        if (fa!=fb)
           father[fa]=fb;
    }
    for (int i=1;i<=n;i++)
        if (father[i]==i)
            sum++;
    cout<return 0;
}

你可能感兴趣的:(并查集)