大家快来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;
}