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/

  • 相关阅读:
    about java
    nginx+tomcat
    sed
    百度推送
    线程及更新ui线程的简单理解
    测试异常检测的Bugly使用
    轮播图带加点,带时间自动轮播加手动轮播
    自定义listView与scrollView使用
    tabLayout加viewPager的实现
    网络获取图片列表
  • 原文地址:https://www.cnblogs.com/xryz/p/4847868.html
Copyright © 2011-2022 走看看