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. Tomcat 8默认工具manager管理页面访问配置

    Tomcat 8默认工具manager管理页面访问配置 1. 分配相关的角色权限 需要配置的配置文件是${catalina.home}/conf/tomcat-users.xml先给Tomcat访问相 ...

  2. 聊聊setTimeout和setInterval线程

    在聊setTimeout和setInterval这两个事件的前,先聊另外一个与之密切关联的知识点,那就是线程(thread).而线程有常常跟另外一个词语--“进程”一起出现.那么何为线程?何为线程呢? ...

  3. mysql快速生成truncate脚本清空数据库表记录

    语句格式: select CONCAT('truncate TABLE ',table_schema,'.',TABLE_NAME, ';') from INFORMATION_SCHEMA.TABL ...

  4. python第十九天——感冒中

    ConfigParser模块,hashlib模块,hmac模块: 创建配置文件: import configparser config = configparser.ConfigParser()#创建 ...

  5. nginx server_name匹配顺序

    server_name可为IP/domain/localhost/null等任何字符串(字符串server_name也可以用来匹配),注意各个 server 块的顺序. 1.如果只有一个server, ...

  6. apache 访问权限出错,apache selinux 权限问题, (13) Permission Denied

    今天在使用 httpd 做文件服务器的时候,发现 png 图像没有打开,但是原本www/html 文件夹内部的文件就可以打开.后来猜测是selinux 的问题,之前一直想写一篇关于selinux 的博 ...

  7. Emacs中使用shell(调出terminal)

    在Emacs中使用shell(调出terminal) 方法: M-x eshell 注意:不能使用 M-x shell,这样调用的是 cmd命令,一些命令无法使用

  8. PLSQL操作Oracle创建用户和表

    1.打开PLSQL,填写用户名和密码(初始有两个用户sys和system,密码是自己安装oracle数据库时定的),Database选择ORCL(默认数据库,oracle中创建的用户就像是mysql中 ...

  9. .NetCore Build Terminology

       .NETCore Command:    1.dotnet build 2.dotnet run 3.dotnet new classlib 4.dotnet new xunit 5.dotne ...

  10. ccf题库20170903--Json查询

    题目如下: 试题编号: - 试题名称: JSON查询 时间限制: .0s 内存限制: .0MB 问题描述: 问题描述 JSON (JavaScript Object Notation) 是一种轻量级的 ...