zoukankan      html  css  js  c++  java
  • codeforces #550D Regular Bridge 构造

    题目大意:给定k(1k100),要求构造一张简单无向连通图,使得存在一个桥,且每一个点的度数都为k
    k为偶数时无解
    证明:
    将这个图缩边双,能够得到一棵树
    那么一定存在一个叶节点,仅仅连接一条桥边
    那么这个边双内部全部点度数之和为偶数 除掉连出去的桥边外度数之和为奇数 故不合法
    然后k为奇数的时候我们仅仅须要构造两个对称的边双被一条桥边连接的图即可了
    因为每一个点度数为k。因此每一边至少须要k+1个点
    可是k+1个点奇偶性不合法。因此每一边至少须要k+2个点
    如今问题转化成了给定一个度数数组要求构造一张原图
    这个在Wc2015讲过 每次找剩余的度数最大的点
    如果这个点的度数为d 那么仅仅须要向其他度数最大的d个点连边即可

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #define M 110
    using namespace std;
    struct edge{
        int x,y;
        edge() {}
        edge(int _,int __):
            x(_),y(__) {}
    }stack[10100];
    int k,top;
    int degree[M],a[M];
    bool Compare(int x,int y)
    {
        return degree[x] > degree[y] ;
    }
    int main()
    {
        int i,j;
        cin>>k;
        if(~k&1)
            return puts("NO"),0;
        puts("YES");
        if(k==1)
            return puts("2 1
    1 2"),0;
        cout<<(k+2<<1)<<' '<<((k+2)*k)<<endl;
        int n=k+2;
        for(degree[1]=k-1,i=2;i<=n;i++)
            degree[i]=k;
        for(i=1;i<=n;i++)
            a[i]=i;
        for(i=1;i<=n;i++)
        {
            sort(a+1,a+n+1,Compare);
            for(j=2;j<=degree[a[1]]+1;j++)
            {
                stack[++top]=edge(a[1],a[j]);
                degree[a[j]]--;
            }
            degree[a[1]]=0;
        }
        for(i=1;i<=top;i++)
        {
            printf("%d %d
    ",edges[i].x,edges[i].y);
            printf("%d %d
    ",edges[i].x+n,edges[i].y+n);
        }
        printf("%d
    ",1,n+1);
        return 0;
    }
  • 相关阅读:
    fzu 2138
    hdu 1598 暴力+并查集
    poj 1734 floyd求最小环,可得到环上的每个点
    floyd求最小环 模板
    fzu 2087并查集的运用求最小生成树的等效边
    hdu 2586 lca在线算法(朴素算法)
    CF 602 D. Lipshitz Sequence 数学 + 单调栈 + 优化
    Problem 2238 Daxia & Wzc's problem 1627 瞬间移动
    D. Tavas and Malekas DFS模拟 + kmp + hash || kmp + hash
    K-th Number 线段树的区间第K大
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/7281479.html
Copyright © 2011-2022 走看看