zoukankan      html  css  js  c++  java
  • CodeForces 209C Trails and Glades[构造]

    欧拉回路是经过所有仅一次

    无向图有欧拉回路的条件是:每个点的度数都是偶数 并且图连通(可以有孤立点)

    
    #include <cstdio>
    #define N 1000007
    int f[N],I[N],d[N],n,m,u,v,A;
    int F(int x) {return x==f[x]?x:f[x]=F(f[x]);}
    int main() {
      d[1]=2;//孤立点不需要连边 但一定要经过1号点 这样做是区别1和孤立点
      //答案是奇度点个数+不含奇度点的连通块个数
      //每个连通块一定有偶数个奇度点,直接连到1上就可以保证图连通,不含奇度点的连通块
      scanf("%d%d",&n,&m);
      for (int i=1;i<=n;++i)f[i]=i;
      while (m--)scanf("%d%d",&u,&v),++d[u],++d[v],f[F(u)]=F(v);
      for (int i=1;i<=n;++i)if(d[i]&1)I[F(i)]=1,++A;//I[i]表示i所在的连通块是否有奇度点
      for (int i=1;i<=n;++i)if(f[i]==i&&d[i]&&!I[i])++++A;//每个没有奇度点的连通块额外需要一条边 
      /*
      4
      1 2
      2 1
      3 4
      4 3 
      为了便于计算 可以理解为(1,2)和(3,4)各需要一条边
      */
      printf("%d",!I[F(1)]&&2==A?0:A/2);//如果1所在连通块没有奇度点并且没有其他边(A==2就是只有1所在连通块"需要"的那条边) 那么答案是0
      return 0;
    }
    
  • 相关阅读:
    Selenium+PhantomJS实现简易有道翻译爬虫
    Scrapy框架实战-妹子图爬虫
    拉勾网职位信息爬取
    Docker Compose容器编排
    Ansible进阶--playbook的使用
    etcd集群部署
    使用Dockerfile构建镜像
    Docker网络管理
    Docker数据管理
    Dubbo高性能网关--Flurry介绍
  • 原文地址:https://www.cnblogs.com/storz/p/10463442.html
Copyright © 2011-2022 走看看