• HDU3018 Ant Trip


    题意:每条边过且只过一次,问至少要画几笔才能全部边都经过。孤立的点忽视。

    #include <iostream>
    using namespace std;
    const int M=100000+10;
    int gree[M];
    int father[M];
    int rank1[M];
    int save[M];
    bool used[M];
    bool mark[M];
    void Make_Set(int x)
    {
        father[x]=x;
        rank1[x]=0;
    }
    int Find(int x)
    {
        int k=0;
        while(x!=father[x])
        {
            save[k++]=x;
            x=father[x];
        }
        for(int j=0; j<k; j++)
            father[save[j]]=x;
        return x;
    }
    void Union(int a,int b)
    {
    
        int x=Find(a);
        int y=Find(b);
        if(x==y) return;
        if(rank1[x]<rank1[y]) father[x]=y;
        else
        {
            father[y]=x;
            if(rank1[x]==rank1[y]) rank1[x]++;
        }
    }
    int main()
    {
        int n, m;
        while(~scanf("%d%d", &n, &m))
        {
            memset(gree,0,sizeof(gree));
            memset(used,0,sizeof(used));
            memset(mark,0,sizeof(mark));
            while(m--)
            {
                int a,b;
                scanf("%d%d",&a,&b);
                if (!used[a])
                {
                    used[a]=1;
                    Make_Set(a);
                }
                if (!used[b])
                {
                    used[b]=1;
                    Make_Set(b);
                }
                gree[a]++;
                gree[b]++;
                Union(a,b);
            }
            int ans=0;
            for(int i=1; i<=n; i++)
            {
                if(used[i]&&gree[i]%2==1)
                {
                    if(mark[Find(i)]==0) mark[Find(i)]=1;//标记该块已经有奇数点了
                    ans++;//计算总奇数点
                }
            }
            ans/=2;//累加,看有多少块没奇数点。。。mark[老大]==0没有奇数点
            for(int i = 1; i <= n; i++)
                if(used[i]&&father[i]==i&&mark[i]==0) ans++;
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    BZOJ 3924: [Zjoi2015]幻想乡战略游戏
    codevs 4244 平衡树练习
    BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊
    BZOJ 2038: [2009国家集训队]小Z的袜子
    luogu P3709 大爷的字符串题
    BZOJ 2120: 数颜色
    luogu P2056 采花
    luogu P2709 小B的询问
    BZOJ 1878: [SDOI2009]HH的项链
    Codeforces 221d D. Little Elephant and Array
  • 原文地址:https://www.cnblogs.com/d-e-v-i-l/p/4782971.html
Copyright © 2020-2023  润新知