关于可图化序列的一点结论 NEU 1429
Graphic Sequence
A graphic sequence is a sequence of numbers which can be the degree sequence of some graph. A sequence can be checked to determine if it is graphic using GraphicQ[g] in the Mathematica package Combinatorica` .
Erdős and Gallai (1960) proved that a degree sequence
is graphic iff the sum of vertex degrees is even and the sequence obeys the property
![]() |
for each integer
(Skiena 1990, p. 157), and this condition also generalizes to directed graphs. Tripathi and Vijay (2003) showed that this inequality need be checked only for as many
as there are distinct terms in the sequence, not for all
.
Havel (1955) and Hakimi (1962) proved another characterization of graphic sequences, namely that a degree sequence with
=3" style="border-width: 0px; vertical-align: middle;"> and
=1" style="border-width: 0px; vertical-align: middle;"> is graphical iff the sequence
is graphical. In addition, Havel (1955) and Hakimi (1962) showed that if adegree sequence is graphic, then there exists a graph
such that the node of highest degree is adjacent to the
next highest degree vertices of
, where
is the maximum degree of
.
No degree sequence can be graphic if all the degrees occur with multiplicity 1 (Behzad and Chartrand 1967, p. 158; Skiena 1990, p. 158). Any degree sequence whose sum is even can be realized by a multigraph having loops (Hakimi 1962; Skiena 1990, p. 158).
很不错的一个定理: 就是给出一个度序列,然后 判读这个度序列是不是可图的当且仅当 满足 : sigma<1,r>(di) <= k*(k-1) +sigma<k+1,n> min(k,di)
( 0< k<=n )
注意到定理中要求 sigma<k+1,n> min(k,di) ; 所以我们可以二分找出度数大于k的区间求出其前缀和即可 时间复杂的达到 O(nlogn) 然后套公式就行了。
其实还有另外一个定理: havel定理,不是怎么实用的定理感觉是 。 网上题解代码 复杂度都是O(n^2logn) 没事水数据玩都是。 还扯些没用的优化,
好像可以计数排序写复杂度是O(n^2) 省赛还是被卡掉的。 O(nlogn) 还挺快>_<。
给出一道题:
1429: Traveling
题目描述
SH likes traveling around the world. When he arrives at a city, he will ask the staff about the number of cities that connected with this city directly. After traveling around a mainland, SH will collate data and judge whether the data is correct.
A group of data is correct when it can constitute an undirected graph.
输入
There are multiple test cases. The first line of each test case is a positive integer N (1<=N<=10000) standing for the number of cities in a mainland. The second line has N positive integers a1, a2, ...,an. ai stands for the number of cities that connected directly with the ith city. Input will be ended by the END OF FILE.
输出
If a group of data is correct, output "YES" in one line, otherwise, output "NO".
样例输入
8 7 7 4 3 3 3 2 1 10 5 4 3 3 2 2 2 1 1 1
样例输出
NO YES
1 #include<cstdio>
2 #include<cstring>
3 #include<algorithm>
4 using namespace std;
5 const int MAX = 1e5;
6 int deg[MAX],sum[MAX],sum2[MAX];
7 int cmp(int a,int b) {return a>b ;}
8 int n;
9 int check() {
if(sum[n]&) return ;
for(int k=;k<=n;k++) {
int L=k+,R=n; int ans;
while(L<=R) {
int mid=(R+L) >> ;
if(deg[mid]>=k) ans=mid,L=mid+;
else R=mid-;
}
sum2[k]=k*(ans-k)+sum[n]-sum[ans];
}
int ans;
for(int i=;i<=n;i++) {
if(sum[i]<=i*(i-)) continue;
ans=sum2[i];
// for(int k=i+1;k<=n;k++) ans+=min(i,deg[k]);
if(sum[i]>i*(i-)+ans) return ;
}
return ;
}
int main() {
while(scanf("%d",&n)==) {
memset(sum,,sizeof(sum));
memset(sum2,,sizeof(sum2));
for(int i=;i<=n;i++) scanf("%d",°[i]);
sort(deg+,deg+n+,cmp);
for(int i=;i<=n;i++) sum[i]=sum[i-] + deg[i];
int ret=check();
if(ret) printf("YES\n");
else printf("NO\n");
}
}
/**************************************************************
Problem: 1429
User: 20124906
Language: C++
Result: 正确
Time:201 ms
Memory:1960 kb
****************************************************************/
关于可图化序列的一点结论 NEU 1429的更多相关文章
- Havel--Hakimi定理推断可图化 python
介绍: 哈维尔[1955]--哈吉米[1962]算法能够用来判读一个度序列d是否是可图化的. 哈维尔[1955]--哈吉米[1962]定理: 对于N > 1,长度为N的度序列d可以可图化当且仅当 ...
- UML精粹3 - 类图,序列图,CRC
类图Class diagram 类图描述系统中的对象类型,以及它们之间的各种静态关系.类图也展示类的性质和操作,以及应用于对象连接方式的约束.UML中的特性feature,涵盖了性质property和 ...
- Havel-Hakimi定理---通过度数列判断是否可图化
0.可图:一个非负整数组成的序列如果是某个无向图的度序列,则该序列是可图的. 1.度序列:Sequence Degree,若把图G所有顶点的度数排成一个序列,责成该序列为图G的一个序列.该序列可以是非 ...
- 从 Java 代码逆向工程生成 UML 类图和序列图
from:http://blog.itpub.net/14780914/viewspace-588975/ 本文面向于那些软件架构师,设计师和开发人员,他们想使用 IBM® Rational® Sof ...
- Android图表库MPAndroidChart(七)—饼状图可以再简单一点
Android图表库MPAndroidChart(七)-饼状图可以再简单一点 接上文,今天实现的是用的很多的,作用在统计上的饼状图,我们看下今天的效果 这个效果,我们实现,和之前一样的套路,我先来说下 ...
- 【51Nod】1510 最小化序列 贪心+动态规划
[题目]1510 最小化序列 [题意]给定长度为n的数组A和数字k,要求重排列数组从而最小化: \[ans=\sum_{i=1}^{n-k}|A_i-A_{i+k}|\] 输出最小的ans,\(n \ ...
- poj 1659 Frogs' Neighborhood 度序列可图化 贪心
题意: 对一个无向图给出一个度序列,问他是否可简单图化. 分析: 依据Havel定理,直接贪心就可以. 代码: //poj 1659 //sep9 #include <iostream> ...
- Visio画UML类图、序列图 for Java
参考文档: 1.百度搜索: 怎样用Visio 2007画C++类图 连接 https://jingyan.baidu.com/article/9f7e7ec07286e16f281554f7.html ...
- 【BZOJ1049】【Luogu P2501】 [HAOI2006]数字序列 DP,结论,LIS
很有(\(bu\))质(\(hui\))量(\(xie\))的一个题目. 第一问:求最少改变几个数能把一个随机序列变成单调上升序列. \(Solution:\)似乎是一个结论?如果两个数\(A_i\) ...
随机推荐
- squid隐藏squid的版本号
reply_header_access Via deny all reply_header_access Cache-Control deny all reply_header_access Serv ...
- 2017.12.20 Java中的 IO/XML学习总结 File类详细
IO / XML 一.File类 1.定义/概念 Java是面向对象的语言,要想把数据存到文件中,就必须要有一个对象表示这个文件.File类的作用就是代表一个特定的文件或目录,并提供了若干方法对这些文 ...
- Java8函数之旅 (三) --几道关于流的练习题
为什么要有练习题? 所谓学而不思则罔,思而不学则殆,在系列第一篇就表明我认为写博客,既是分享,也是自己的巩固,我深信"纸上得来终觉浅,绝知此事要躬行"的道理,因此之后的几篇博 ...
- C# 常用函数和方法集汇总
1.DateTime 数字型 System.DateTime currentTime=new System.DateTime(); 1.1 取当前年月日时分秒 currentTime=System.D ...
- 爬虫学习(三)——get请求参数解析
get请求: 用户输入搜索的内容,发送请求,将请求的内容保存起来. get请求的本质是在地址栏中输入参数进行的一种请求方式. 解析参数使用urllib.parse impo ...
- 十一、Shell 输入/输出重定向
Shell 输入/输出重定向 大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令 ...
- OpenFaceswap 入门教程(3): 软件参数篇!
OpenFaceswap 的使用可以说是非常简单,只要稍加点拨就可以学会,厉害一点的人根本不需要教程,直接自己点几下就知道了.看了前面安装篇和使用篇.我想大多数人应该会了. 当学会了使用之后,你可能对 ...
- [NOIP2012]疫情控制(二分答案+倍增+贪心)
Description H国有n个城市,这n个城市用n-1条双向道路相互连通构成一棵树,1号城市是首都,也是树中的根节点. H国的首都爆发了一种危害性极高的传染病.当局为了控制疫情,不让疫情扩散到边境 ...
- poj 3045 叠罗汉问题 贪心算法
题意:将n头牛叠起来,每头牛的力气 s体重 w 倒下的风险是身上的牛的体重的和减去s 求最稳的罗汉倒下去风险的最大值 思路: 将s+w最大的放在下面,从上往下看 解决问题的代码: #include& ...
- Hive UDAF开发详解
说明 这篇文章是来自Hadoop Hive UDAF Tutorial - Extending Hive with Aggregation Functions:的不严格翻译,因为翻译的文章示例写得比较 ...
