数小区

来源:互联网 发布:网络用语2017最新英文 编辑:程序博客网 时间:2024/05/17 07:31

数小区

Time Limit: 1000MS Memory limit: 65536K

题目描述

某城市有n个人,现在给定关于n个人的m条信息,m条信息是两个人在同一个小区,根据所给信息,判断这个城市最多可能有多少个小区。n个人编号为1~n。

输入

多组输入。
每组第一行有两个整数n,m(2 <= n <= 50000, 0 <= m <= n/2)。
接下来m行,每行两个整数a,b,表示a和b在同一个小区。

输出

根据所给信息,输出这个城市最多可能有多少个小区。

示例输入

5 2 1 2 3 4

示例输出

3

 

数小区是一个典型的并查集的题,其中也是最简单的题。

我也就只会简单题了,,,

 

 

 

#include
#include
#include
#define MAX_N 205000
int a[MAX_N];
int find(int x)
{
    int i,j,r;
    r = x;
    while(r != a[r])
    {
        r = a[r];
    }
    return r;
}
void merge(int x,int y)
{
    int fx,fy;
    fx = find(x);
    fy = find(y);
    if(fx != fy)
    {
        a[fx] = fy;
    }
}
int main()
{
    int n,m,i;
    int x,y;
    while(~scanf("%d %d",&n,&m))
    {
        for(i = 1; i <= n; i++)
        {
            a[i] = i;
        }
        for(i = 1; i <= m; i++)
        {
            scanf("%d %d",&x,&y);
            merge(x,y);
        }
        int count = 0;
        for(i = 1; i <= n; i++)
        {
            if(a[i] == i)
            {
                count++;
            }
        }
        printf("%d\n",count);
    }
    return 0;
}


代码菜鸟如有错误请多包涵!!

1 0
原创粉丝点击