Erdos-Gallai定理

数列 ( d 1 , d 2 , . . . , d n ) ( n − 1 ≥ d 1 ≥ d 2 ≥ . . . ≥ d n ≥ 0 ) (d_1,d_2,...,d_n)(n-1\ge d_1\ge d_2\ge ...\ge d_n\ge 0) (d1,d2,...,dn)(n1d1d2...dn0)可简单图化的充要条件是:

  1. ∑ i = 1 n d i \sum_{i=1}^nd_i i=1ndi为偶数
  2. ∀ r ( 1 ≤ r ≤ n ) , ∑ i = 1 r d i ≤ r ( r − 1 ) + ∑ i = r + 1 n min ⁡ { r , d i } \forall r(1\le r\le n),\sum_{i=1}^rd_i\le r(r-1)+\sum_{i=r+1}^n\min\{r,d_i\} r(1rn),i=1rdir(r1)+i=r+1nmin{ r,di}

证明

必要性:
考虑编号 1 ∼ r 1\sim r 1r的点,内部连边数不超过 1 2 r ( r − 1 ) \frac{1}{2}r(r-1) 21r(r1),与其他点连边总数不超过 ∑ i = r + 1 n min ⁡ { r , d i } \sum_{i=r+1}^n\min\{r,d_i\} i=r+1nmin{ r,di}。即得 ∑ i = 1 r d i ≤ r ( r − 1 ) + ∑ i = r + 1 n min ⁡ { r , d i } \sum_{i=1}^rd_i\le r(r-1)+\sum_{i=r+1}^n\min\{r,d_i\} i=1rdir(r1)+i=r+1nmin{ r,di}
充分性:
用数学归纳法证明。
n = 1 n=1 n=1时,构造平凡图即可。
②假设 n = k − 1 n=k-1 n=k1时结论成立。当 n = k n=k n=k时,证明过程略(可以看这篇https://blog.csdn.net/hdmmblz/article/details/86506433)。

推论

数列 ( d 1 , d 2 , . . . , d n ) ( n − 1 ≥ d 1 ≥ d 2 ≥ . . . ≥ d n ≥ 0 ) (d_1,d_2,...,d_n)(n-1\ge d_1\ge d_2\ge ...\ge d_n\ge 0) (d1,d2,...,dn)(n1d1d2...dn0)可简单图化当且仅当数列 s o r t e d ( d 2 − 1 , d 3 − 1 , . . . , d d 1 + 1 − 1 , d d 1 + 2 , . . . , d n ) sorted(d_2-1,d_3-1,...,d_{d_1+1}-1,d_{d_1+2},...,d_n) sorted(d21,d31,...,dd1+11,dd1+2,...,dn)可简单图化。

证明

充分性:
s o r t e d ( d 2 − 1 , d 3 − 1 , . . . , d d 1 + 1 − 1 , d d 1 + 2 , . . . , d n ) sorted(d_2-1,d_3-1,...,d_{d_1+1}-1,d_{d_1+2},...,d_n) sorted(d21,d31,...,dd1+11,dd1+2,...,dn)可简单图化,则将节点 1 1 1与节点 2 ∼ d 1 + 1 2\sim d_1+1 2d1+1连边,即可得到度数列为 ( d 1 , d 2 , . . . , d n ) (d_1,d_2,...,d_n) (d1,d2,...,dn)的简单图。
必要性:
( d 1 , d 2 , . . . , d n ) (d_1,d_2,...,d_n) (d1,d2,...,dn)可简单图化为图 G G G。设 G − v 1 G-{v_1} Gv1的度数列 为 ( d 2 ′ , d 3 ′ , . . . , d n ′ ) 为(d_2',d_3',...,d_n') (d2,d3,...,dn),则:
∀ r ( 2 ≤ r ≤ n ) , ∑ i = 2 r d i ′ ≤ ( r − 1 ) ( r − 2 ) + ∑ i = r + 1 n min ⁡ { r − 1 , d i ′ } \forall r(2\le r\le n),\sum_{i=2}^rd_i'\le (r-1)(r-2)+\sum_{i=r+1}^n\min\{r-1,d_i'\} r(2rn),i=2rdi(r1)(r2)+i=r+1nmin{ r1,di}
s o r t e d ( d 2 − 1 , d 3 − 1 , . . . , d d 1 + 1 − 1 , d d 1 + 2 , . . . , d n ) = ( d 2 ′ ′ , d 3 ′ ′ , . . . , d n ′ ′ ) sorted(d_2-1,d_3-1,...,d_{d_1+1}-1,d_{d_1+2},...,d_n)=(d_2'',d_3'',...,d_n'') sorted(d21,d31,...,dd1+11,dd1+2,...,dn)=(d2,d3,...,dn)。则:
∀ r ( 2 ≤ r ≤ n ) , ∑ i = 2 r d i ′ ′ ≤ ∑ i = 2 r d i ′ , ∑ i = r + 1 n d i ′ ′ ≥ ∑ i = r + 1 n d i ′ \forall r(2\le r\le n),\sum_{i=2}^rd_i''\le \sum_{i=2}^rd_i',\sum_{i=r+1}^nd_i''\ge \sum_{i=r+1}^nd_i' r(2rn),i=2rdii=2rdi,i=r+1ndii=r+1ndi
∴ ∑ i = 2 r d i ′ ′ − ∑ i = r + 1 n min ⁡ { r − 1 , d i ′ ′ } ≤ ∑ i = 2 r d i ′ − ∑ i = r + 1 n min ⁡ { r − 1 , d i ′ } ≤ ( r − 1 ) ( r − 2 ) \therefore \sum_{i=2}^rd_i''-\sum_{i=r+1}^n\min\{r-1,d_i''\}\le \sum_{i=2}^rd_i'-\sum_{i=r+1}^n\min\{r-1,d_i'\}\le (r-1)(r-2) i=2rdii=r+1nmin{ r1,di}i=2rdii=r+1nmin{ r1,di}(r1)(r2)
因此 s o r t e d ( d 2 − 1 , d 3 − 1 , . . . , d d 1 + 1 − 1 , d d 1 + 2 , . . . , d n ) sorted(d_2-1,d_3-1,...,d_{d_1+1}-1,d_{d_1+2},...,d_n) sorted(d21,d31,...,dd1+11,dd1+2,...,dn)可简单图化。

Havel算法

可以通过度数列构造一个简单图
具体做法就是利用推论,每次把点 1 1 1和点 2 ∼ d 1 + 1 2\sim d_1+1 2d1+1进行连边,然后把序列重新排个序。朴素实现复杂度 O ( n 2 log ⁡ n ) O(n^2\log n) O(n2logn)