zoukankan      html  css  js  c++  java
  • uva 10596 欧拉回路

    判断是否存在欧拉回路只要两个条件

    图连通,不存在奇度点

    注意特判边为0的情况。另外这题数据坑。

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int maxn=208;
    struct fuck{
     int u,v,next;
    }edge[maxn*maxn];
    int head[maxn];
    int tol;
    void init()
    {
     tol=0;
     memset(head,-1,sizeof(head));
    }
    void addedge(int u,int v)
    {
     edge[tol].u=u;
     edge[tol].v=v;
     edge[tol].next=head[u];
     head[u]=tol++;
    }
    bool vis[maxn];
    int du[maxn];
    void dfs(int u)
    {
     int i,v;
     vis[u]=true;
     for(i=head[u];i!=-1;i=edge[i].next)
     {
      v=edge[i].v;
      if(!vis[v]) dfs(v);
     }
    }
    bool judge(int n)
    {
     for(int i=1;i<=n;i++)
      if(du[i]%2) return true;
     return false;
    }
    int main()
    {
     int i,j,n,m,u,v;
     while(scanf("%d%d",&n,&m)==2)
     {
      init();
      memset(du,0,sizeof(du));
      u=0;
      for(i=1;i<=m;i++)
      {
       scanf("%d%d",&u,&v);
       u++;v++;
       du[u]++;du[v]++;
       addedge(u,v);
       addedge(v,u);
      }
      memset(vis,false,sizeof(vis));
      dfs(u);
      bool flag=false;
      for(i=1;i<=n;i++)
       if(!vis[i]&&du[i]>0)
         break;
     // printf("%d ",i);
      if(i>n) flag=true;
      if(!flag||judge(n)||m<2) printf("Not Possible ");
      else printf("Possible ");
     }
     return 0;
    }
  • 相关阅读:
    Luogu P1020 导弹拦截
    洛谷 p1196 带权并查集
    gradle 语法基础
    Codeforces Round #542 div.2 C
    我了解的字符编码
    洛谷p3374 树状数组1
    树状数组2
    线段树模板 求区间和, 区间加法,乘法更新
    洛谷 p1886 滑动窗口
    HDOJ.1251
  • 原文地址:https://www.cnblogs.com/bitch1319453/p/4814697.html
Copyright © 2011-2022 走看看