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. CSS 实现隐藏滚动条同时又可以滚动

    方法1: 利用 css 3 的新特性  -webkit-scrollbar, 但是这种方式只兼容chrome,不兼容 火狐 和 IE. /* for Chrome */ .content::-webk ...

  2. LaTeX:图形的填充(生成阴影图形)

    将内网和外网看到的综合整理. 韦恩图Venn \documentclass{standalone} \usepackage{tikz} %导出为图片需要安装imagemagick %https://t ...

  3. axure工具的使用总结

    ---恢复内容开始--- Axure工具的使用 axure是什么? Axure RP是一款快速原型设计工具,它不需要任何编程或写代码基础,就可以设计出交互效果良好的产品原型,常用于互联网产品设计.网页 ...

  4. JavaWeb:Listener和Filter

    本文内容: Listener Filter 首发日期:2018-07-15 Listener 监听器Listener负责监听事件的发生.我们能在事件发生后执行一些自定义的操作,这就是监听器的意义. 监 ...

  5. [20180608]Wrong Results with IOT, Added Column and Secondary Index.txt

    [20180608]Wrong Results with IOT, Added Column and Secondary Index.txt --//链接:http://db-oriented.com ...

  6. [SequenceFile_2] SequenceFile 的基本操作

    0. 说明 测试序列文件的读写操作 && 测试序列文件的排序操作 && 测试序列文件的合并操作 && 测试序列文件的压缩方式 && 测试 ...

  7. 【PAT】B1053 住房空置率(20 分)

    #include<cstdio> #include<string.h> #include<algorithm> using namespace std; int m ...

  8. Linux下如何杀死终端

    1.首先是使用who命令查看当前有多少个终端登陆了Linux系统 [root@:vg_adn_tidbCkhsTest /usr/local/redis/bin]#who mobdev pts : ( ...

  9. C++基础算法学习——汉洛塔问题

    汉诺塔问题古代有一个梵塔,塔内有三个座A.B.C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图).有一个和尚想把这64个盘子从A座移到C座,但每次只能允许移动一个盘子,并且在移动过程中, ...

  10. 在 vs2017 中使用 C# 7 新特性。

    几个概念区分: 1.C#   C# 是一种.net 语言,与此类似的还有 vb,F#.不同版本的语言要配合相应的解释器才能发挥作用.目前 最新版本 为 C# 7.3. 2.VS        VS 是 ...