Luogu传送门(UVA常年上不去)

题意:求一个度序列是否可变换为一个简单图。$\text{序列长度} \leq 10000$


题目看起来很简单,但是还是有一些小细节需要注意
首先一个简单的结论:一张图的所有点的度数之和为偶数,因为每一条边都会对度数和产生$2$的贡献。通过这一个结论可以判断掉很多的非法情况。
当然如果做到这里就天真地交上去了,在若干秒之后就会给你显示一个喜庆的$WA$,因为我们还有一个很重要的因素没有考虑:图是一个简单图。简单图意味着不能有重边和自环,而上面的那个结论不足以判断图中是否必定存在重边和自环。
我们按照如下的思路考虑:因为度数比较大的点最有可能出现重边和自环,所以我们考虑这些点尽可能地向其他的点连边后会不会有度数的剩余。
将给出的序列$a$从大到小排序,设其非$0$元素长度为$p$,考虑一个长度为$i$的前缀,这$i$个点之间连边产生$i \times (i - 1)$的贡献,而这$i$个点与其余$(p-i)$个点连边又产生$i \times(p-i)$的贡献,也就是说如果$\sum \limits _{k=1} ^i a_k > i \times (p-1)$,则这个序列是不可图的
然后又激动地交了上去,然后又$WA$了,然后去$Udebug$上找数据,发现了这样一组数据:

        

事实上这一组数据是非法的,因为对于$6$和$7$来说,至少要连出$11$条边,但是实际上最多只能连出$10$条边(有两个$1$),所以上面的算法有疏漏。疏漏在哪里呢?是$\sum \limits _{k=1} ^i a_k > i \times (p-1)$的右半边多算了(比如说上面数据在$i=2$时的两个$1$的贡献就多算了)

所以我们考虑:维护一个指针,将比当前的$i$小的数全部丢到一边,单独维护它们的和,再加上没有被丢掉的点的个数$\times i$,与$\sum \limits _{k=1} ^i a_k$作比较,如果大了表示当前序列不合法。这种算法就可以$AC$这道题了。
为什么这个题目写了这么长的题解qwq

 #include<bits/stdc++.h>
using namespace std; inline int read(){
int a = ;
char c = getchar();
bool f = ;
while(!isdigit(c)){
if(c == '-')
f = ;
c = getchar();
}
while(isdigit(c)){
a = (a << ) + (a << ) + (c ^ '');
c = getchar();
}
return f ? -a : a;
} int num[]; bool cmp(int a , int b){
return a > b;
} int main(){
#ifndef ONLINE_JUDGE
freopen("10720.in" , "r" , stdin);
freopen("10720.out" , "w" , stdout);
#endif
int N;
while(N = read()){
bool f = ;
for(int i = ; i <= N ; ++i){
num[i] = read();
if(num[i] & )
f ^= ;
}
sort(num + , num + N + , cmp);
int sum = , p = N , lst , add = ;
while(p && !num[p])
--p;
lst = p;
for(int i = ; !f && i <= lst ; ++i){
sum += num[i];
if(sum - i * (i - ) - i * (p - i) - add > )
f = ;
while(p > i && num[p] == i)
add += num[p--];
if(p == i)
add -= num[++p];
}
puts(f ? "Not possible" : "Possible");
}
return ;
}

UVA10720 Graph Construction 度序列可图性的更多相关文章

  1. HDU 2454"Degree Sequence of Graph G"(度序列可图性判断)

    传送门 参考资料: [1]:图论-度序列可图性判断(Havel-Hakimi定理) •题意 给你 n 个非负整数列,判断这个序列是否为可简单图化的: •知识支持 握手定理:在任何无向图中,所有顶点的度 ...

  2. poj 1659 Frogs&#39; Neighborhood 度序列可图化 贪心

    题意: 对一个无向图给出一个度序列,问他是否可简单图化. 分析: 依据Havel定理,直接贪心就可以. 代码: //poj 1659 //sep9 #include <iostream> ...

  3. UVA 10720 Graph Construction 贪心+优先队列

    题目链接: 题目 Graph Construction Time limit: 3.000 seconds 问题描述 Graph is a collection of edges E and vert ...

  4. poj 1659 Frogs&#39; Neighborhood (度序列)

    Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 7295   Accepted: 31 ...

  5. 可图性判定--Havel-Hakimi定理

    两个概念 1.度序列 若把图G所有顶点的度数排成一个序列S,则称S为图G的度序列. 2.序列是可图的 一个非负整数组成的序列如果是某个无向图的度序列,则称该序列是可图的. Havel-Hakimi定理 ...

  6. UVa 10720 - Graph Construction(Havel-Hakimi定理)

    题目链接: 传送门 Graph Construction Time Limit: 3000MS     Memory Limit: 65536K Description Graph is a coll ...

  7. windowmasker 标记基因组中的重复序列和低复杂度序列

    下载地址:ftp://ftp.ncbi.nlm.nih.gov/pub/agarwala/windowmasker/ 在这个目录下 其中windowmasker 为linux 平台的可执行文件 win ...

  8. 从零开始学Graph Database:什么是图

    摘要:本文从零开始引导与大家一起学习图知识.希望大家可以通过本教程学习如何使用图数据库与图计算引擎.本篇将以华为云图引擎服务来辅助大家学习如何使用图数据库与图计算引擎. 本文分享自华为云社区<从 ...

  9. UVa 10720 - Graph Construction

    题目大意:给n个整数, 分别代表图中n个顶点的度,判断是否能构成一张图. 看到这个题后,除了所有数之和应该为偶数之外,没有别的想法了,只好在网上搜解题报告了.然后了解了Havel-Hakimi定理.之 ...

随机推荐

  1. 双网卡设置(转:https://www.cnblogs.com/visionfeng/p/5825078.html)

    双网卡一般情况不能有两个网关 特别是别设内网网关,这样有段时间过后会出现访问不了外网情况 支持两个网关的方法倒是有 让双网卡一台电脑拥有两个网关(转) 首先要声明一点,双网卡一台电脑拥有两个网关是不可 ...

  2. Java数据解析---JSON

    一.Java数据解析分为:XML解析和JSON解析 XML解析即是对XML文件中的数据解析,而JSON解析即对规定形式的数据解析,比XML解析更加方便 JSON解析基于两种结构: 1.键值对类型 { ...

  3. iOS开发-本地存储(偏好设置,Plist,归档)

    1.   NSUserDefaults //TODO: 1.NSUserDefaults NSUserDefaults类除了可以存储数组.字典.NSdata外,还可以直接存储OC基本类型属性.但是不能 ...

  4. 怎么查找Jenkins的个人api token

    程序中可变部分解释:其中server.build_job方法传入的参数channel为分渠道构建参数,也即jenkins job的参数,这个参数随不同的日常job不同是不同的,实际编写脚本的过程中这个 ...

  5. pycharm运行Django发生AppRegistryNotReady: Apps aren't loaded yet.

    pycharm中运行django默认情况下并不是执行项目的,所以如果在非manage.py,会发生异常. raise AppRegistryNotReady("Apps aren't loa ...

  6. TensorFlow 安装教程

    1.准备好Anaconda环境 tensorflow是属于很高层的应用.高层应用的一个比较大的麻烦就是需要依赖的底层的东西很多,如果底层依赖没有弄好的话,高层应用是没法玩转的. 在极客学院有关tens ...

  7. [201804012]关于hugepages 3.txt

    [201804012]关于hugepages 3.txt --//有一段时间我一直强调安装oracle一定要配置hugepage,因为现在的服务器内存越来越大,如果还使用4K的页面表,如果内存表占用内 ...

  8. 02-OpenLDAP配置

    OpenLDAP配置 在OpenLDAP 2.4版本中,配置OpenLDAP的方法有两种:一种通过修改配置文件实现配置,另一种通过修改数据库的形式完成配置. 通过配置数据库完成各种配置,属于动态配置且 ...

  9. Dos命令讲解

    目录 一.什么是DOS 二.启动DOS的多种方法 三.DOS的内部命令与外部命令 四.系统环境变量讲解 增加Path环境变量路径 常见的系统环境变量 五.常用的运行命令 六.DOS使用技巧 设置CMD ...

  10. C#各种对话框

    1.选取文件夹的FolderBrowserDialog fbd = new FolderBrowserDialog();fbd.SelectedPath = "D:\Test";i ...