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. twindows下omcat8安装后,不能启动服务

    原因可能是cmd安装时,不是以管理员的身份运行cmd命令的.解决办法,以管理员身份运行cmd,进入tomcat安装/解压的bin目录下,先执行 service.bat remove 命令卸载服务,之后 ...

  2. Docker第二章:docker基础1--镜像,容器&仓库

    镜像介绍及操作:http://www.haveneed.cn/article-detials/115 容器介绍及操作:http://www.haveneed.cn/article-detials/11 ...

  3. springcloud 入门 11 (Hystrix Dashboard)

    hystrix: 断路器我在前面已经介绍,不了解的可以参考 :springcloud 入门 6 (断路器hystrix)  关于搭建,测试我都在这里面进行说明了,这章介绍的是  Hystrix Das ...

  4. 【redis专题(2)】命令语法介绍之string

    REDIS有5大数据结构:string,link,sortedset,sets,hash. 这5个结构我将用5篇文章来记录各自是怎么用的,然后再用一篇文章来说一下各自的应用场景: 更多语法请参考: h ...

  5. python中常用函数整理

    1.map map是python内置的高阶函数,它接收一个函数和一个列表,函数依次作用在列表的每个元素上,返回一个可迭代map对象. class map(object): ""&q ...

  6. python第七十一天---堡垒机

    堡垒机的表结构图:

  7. CSS| 框模型-margin

    CSS margin 属性 设置外边距的最简单的方法就是使用 margin 属性. margin 属性接受任何长度单位,可以是像素.英寸.毫米或 em. margin 可以设置为 auto.更常见的做 ...

  8. 第五章 绘图基础(DEVCAPS1)

    获取设备环境的信息 //DEVCAPS1.C--Device Capabilities Display Program No.1 (c) Charles Petzold, 1998 #include ...

  9. Centos7系统详细的启动流程

    熟悉系统启动流程对于我们学习Linux系统是非常有帮助的,虽然基础,但能帮助我们更加理解Linux系统的工作机制.以下将以CentOS发行版为例来介绍Linux系统的启动流程,因为在CentOS 5. ...

  10. Alpha冲刺博客汇总(麻瓜制造者)

    目录 Alpha冲刺报告 Github项目地址 测试报告与用户反馈博客地址 课程展示博客地址 事后诸葛亮 Alpha冲刺报告 Alpha冲刺报告(1/12)(麻瓜制造者) Alpha冲刺报告(2/12 ...