注意:两个城市之间可以有多条道路相通,也就是说
3 3
1 2
1 2
2 1
这种输入也是合法的
当N为0时,输入结束,该用例不被处理。
4 2 1 3 4 3 3 3 1 2 1 3 2 3 5 2 1 2 3 5 999 0 0
1 0 2 998Huge input, scanf is recommended.HintHint
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
inline int read(){
char c=getchar();
int s=0;
while(c<'0'||c>'9'){
c=getchar();
}
while(c>='0'&&c<='9'){
s*=10;
s+=c-'0';
c=getchar();
}
return s;
}
int f[1005];
int findf(int u){
return f[u]=(f[u]==u?f[u]:findf(f[u]));
}
int main(){
int n,m,u,v;
while(n=read()){
m=read();
for(u=1;u<=n;u++){
f[u]=u;
}
while(m--){
u=read();
v=read();
int x=findf(u),y=findf(v);
if(x!=y){
f[x]=y;
}
}
for(u=1;u<=n;u++){
f[u]=findf(u);
}
sort(f+1,f+n+1);
for(u=1,v=0;u<=n;u++){
v+=(f[u]!=f[u-1]);
}
printf("%d\n",v-1);
}
return 0;
}
394



被折叠的 条评论
为什么被折叠?



