KY175 连通图C
最近实在是太偷懒了,再这样下去复试直接寄。要努努力了。

简单一点可以用并查集,不嫌麻烦DFS/BFS都可以判断是否连通。
#include<stdio.h>
void swap(int* x,int* y){
if(*x >*y){
int t=*x;
*x=*y;
*y=t;
}
}
int father(int set[],int x);
void mergeset(int set[],int x,int y){
set[father(set,y)]=father(set,x);
}
int father(int set[],int x){
if(set[x]==x){
return x;
}
return father(set,set[x]);
}
int main(){
int n=0,m=0;
while(scanf("%d %d",&n,&m)!=EOF){
if(n==0) break;
int set[1001]={0};
for(int i=1;i<=n;i++){
set[i]=i;
}
while (m != 0) {
int x = 0, y = 0;
scanf("%d %d", &x, &y);
swap(&x, &y);
mergeset(set, x, y);
m--;
}
int tag=0;
for(int i=1;i<=n;i++){
if(set[i]==i){
tag++;
}
if(tag>=2){
printf("NO\n");
break;
}
}
if(tag==1) printf("YES\n");
}
return 0;
}
结果:

浙公网安备 33010602011771号