llllmz

导航

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;
}

结果:

posted on 2024-02-15 15:04  神奇的萝卜丝  阅读(22)  评论(0)    收藏  举报