zoukankan      html  css  js  c++  java
  • PAT甲题题解-1126. Eulerian Path (25)-欧拉回路+并查集判断图的连通性

    题目已经告诉如何判断欧拉回路了,剩下的有一点要注意,可能图本身并不连通。

    所以这里用并查集来判断图的联通性。

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <string.h>
    #include <string>
    using namespace std;
    /*
    并查集用来判断图的联通性,有一组样例图是不连通的。。。
    */
    const int maxn=505;
    int degree[505];
    
    struct UF{
        int father[maxn];
        void init(){
            for(int i=0;i<maxn;i++){
                father[i]=i;
            }
        }
        int find_root(int x){
            if(father[x]!=x)
                father[x]=find_root(father[x]);
            return father[x];
        }
        void Union(int x,int y){
            int fx=find_root(x);
            int fy=find_root(y);
            if(fx!=fy)
                father[fx]=fy;
        }
    }uf;
    int main()
    {
        int n,m;
        int a,b;
        uf.init();
        scanf("%d %d",&n,&m);
        for(int i=0;i<m;i++){
            scanf("%d %d",&a,&b);
            degree[a]++;
            degree[b]++;
            uf.Union(a,b);
        }
        int vis[maxn];
        memset(vis,0,sizeof(vis));
        for(int i=1;i<=n;i++){
            int fa=uf.find_root(i);
            vis[fa]=1;
        }
        int graphs=0;
        for(int i=1;i<=n;i++){
            if(vis[i]){
                graphs++;
            }
        }
        int sum=0;
        int cnt=0;
        for(int i=1;i<=n;i++){
            if(i==1)
                printf("%d",degree[i]);
            else
                printf(" %d",degree[i]);
            sum+=degree[i];
            if(degree[i]%2){
                cnt++;
            }
        }
        printf("
    ");
        if(sum%2 || graphs>1){
            printf("Non-Eulerian
    ");
        }
        else{
            if(cnt==0)
                printf("Eulerian
    ");
            else if(cnt==2)
                printf("Semi-Eulerian
    ");
            else
                printf("Non-Eulerian
    ");
        }
        return 0;
    }
    View Code
  • 相关阅读:
    图解 Kubernetes
    如何构建可伸缩的Web应用?
    2020年软件开发趋势
    3种基础的 REST 安全机制
    为什么你应该使用 Kubernetes(k8s)
    Elasticsearch:是什么?你为什么需要他?
    你在使用什么 Redis 客户端工具?
    ZooKeeper 并不适合做注册中心
    Jmeter(三)_配置元件
    Jmeter(二)_基础元件
  • 原文地址:https://www.cnblogs.com/chenxiwenruo/p/6506503.html
Copyright © 2011-2022 走看看