本文主要是介绍大家快来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;
}
这篇关于大家快来A水题 2805的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!