大家快来A水题 2805

大家快来A水题

Problem Description
海上有N(1<= N <=2000)个岛,编号从1到N,同一部落的岛屿之间有直接或间接的路相连,不同部落之间无路可通。现在给出M(1<= M <= N*(N-1)/2)条路。问这片海域上共有多少部落。
Input
多组输入。每组第一行输入N,M。接下来M行每行,每行两个整数u,v代表岛u与v之间有一条路。
Output
每组数据输出一个整数,代表部落数。
Sample Input
3 1
1 2
3 2
1 2
1 3
Sample Output
2
1

#include <stdio.h>
#include <stdlib.h>
int f[11000];
int find(int x)
{
    if(x!=f[x])
    {
        f[x]=find(f[x]);
    }
    return f[x];
}
void join(int x,int y)
{
    x=find(x);
    y=find(y);
    if(x!=y)
    {
        f[y]=x;
    }
}
int main()
{
    int m,u,v,i,n,c;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        for(i=1;i<=n;i++)
            f[i]=i;
        for(i=0;i<m;i++)
        {
            scanf("%d%d",&u,&v);
            join(u,v);
        }
        c=0;
        for(i=1;i<=n;i++)
        {
            if(f[i]==i) c++;
        }
        printf("%d\n",c);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/sun1311523821/article/details/84673517