zoukankan      html  css  js  c++  java
  • Havel定理

    先贴一个百度百科的注释

    Havel定理编辑

    本词条缺少概述名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!
    中文名
    Havel定理
    外文名
    Canisters theorem
    特    点
    非负整数序列{dn}
    实    质
    无向图使得图中各点的度
    给定一个非负整数序列{dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化。进一步,若图为简单图,则称此序列可简单图化
    可图化的判定:d1+d2+……dn=0(mod 2)。关于具体图的构造,我们可以简单地把奇数度的点配对,剩下的全部搞成自环。
    可简单图化的判定(Havel定理):把序列排成不增序,即d1>=d2>=……>=dn,则d 可简单图化当且仅当d’={d2-1,d3-1,……d(d1+1)-1, d(d1+2),d(d1+3),……dn}可简单图化。简单的说,把d排序后,找出度最大的点(设度为d1),把它与度次大的d1个点之间连边,然后这 个点就可以不管了,一直继续这个过程,直到建出完整的图,或出现负度等明显不合理的情况。
    定理的证明:略
     

    然后贴一个实现的代码
     1 #define REP(i, n) for(int i=0; i<n; i++)
     2 pair<int, int> e1[maxm], e2[maxm];
     3 struct Node
     4 {
     5     int d, id;
     6     bool operator < (const Node& rhs) const
     7     {
     8         return d > rhs.d;
     9     }
    10 } p[2][maxn];
    11 
    12 
    13 bool solve(Node *p, pair<int, int> *e)
    14 {
    15     int cnt = 0;
    16     REP(i, n-1)
    17     {
    18         sort(p+i, p+n);
    19         if(p[i].d+i > n-1) return false;
    20         for(int j=i+1; j <= p[i].d+i; j++)
    21         {
    22             if(--p[j].d < 0) return false;
    23             e[cnt++] = make_pair(p[i].id+1, p[j].id+1); // 加边
    24         }
    25     }
    26     return p[n-1].d == 0;
    27 }
  • 相关阅读:
    前端编程练习:电子表翻盘效果
    前端编程练习:钟表(下):使用js编写钟表
    前端编程练习:钟表(上):使用背景图实现效果
    使用原生js编写贪吃蛇小游戏
    前端编程练习:手风琴
    前端编程练习:电子表
    前端编程练习:放大镜
    Winfrom之domainUpDown控件
    Winfrom之MaskedText(高级文本框)
    Winfrom之ProgressBar控件(进度条)
  • 原文地址:https://www.cnblogs.com/oneshot/p/4117632.html
Copyright © 2011-2022 走看看