zoukankan      html  css  js  c++  java
  • hdu3018 Ant Trip 欧拉回路

    题意是几笔可以画完所给的图,其中没有与其他点连同的不需要考虑。

    先用并查集将点分成不同的集合,由于题目是问几笔,所以不用考虑连通性。只需要考虑不同集合根节点中记录的这个集合奇度节点的个数,如果是零,最后答案加一,反之加上除二后的结果。

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    const int N=150000+5;
    
    int n,m,p[N],ans,in[N],odd[N],even[N];
    
    int Find(int x)
    {
        if(p[x]==x) return x;
        else return p[x]=Find(p[x]);
    }
    
    void Union(int a,int b)
    {
        int f1=Find(a),f2=Find(b);
        if(f1!=f2) p[f1]=f2;
    }
    
    int main()
    {
        int i,j,u,v;
        while(~scanf("%d%d",&n,&m))
        {
            for(i=0;i<n;i++)
            {
                p[i]=i;
                in[i]=0;
                odd[i]=0;
                even[i]=0;
            }
    
            for(i=0;i<m;i++)
            {
                scanf("%d%d",&u,&v);
                u--;
                v--;
                Union(u,v);
                in[u]++;
                in[v]++;
            }
            for(i=0;i<n;i++)
            {
                int f=Find(i);
                if(in[i]==0) continue;
    
                if(in[i]%2==0) even[f]++;
                else odd[f]++;
            }
            ans=0;
            for(i=0;i<n;i++)
            {
                if(p[i]!=i||!in) continue;
                if(odd[i]==0&&even[i]==0) continue;
                else if(odd[i]==0) ans++;
                else ans+=odd[i]/2;
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    

    版权声明:本文为博主原创文章,未经博主允许不得转载。http://xiang578.top/

  • 相关阅读:
    ORACLE CLIENT客户端安装步骤详解
    mkswap 把一个分区格式化成为swap交换区
    编译安装lnmp
    使用源代码安装lnmp
    查看nginx编译安装
    linux lnmp编译安装
    nginx编译安装
    lnmp脚本
    搭建LAMP测试环境
    绝路上的桥
  • 原文地址:https://www.cnblogs.com/xryz/p/4847868.html
Copyright © 2011-2022 走看看