1092: 并查集(模版 家族)

来源:互联网 发布:大富豪棋牌源码3.4.1 编辑:程序博客网 时间:2024/05/29 18:06

时间限制: 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; } 
原创粉丝点击