http://acm.uestc.edu.cn/#/problem/show/913

握手

Time Limit: 2000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
Submit Status

一群人参加了一次聚会,其中有一些人是好朋友。一对朋友见面后握手且仅握一次手,并且每个人不会和自己握手(废话!)。现在告诉你每个人一共握了几次手,请你判断是否存在一种朋友关系满足每个人的握手数。

Input

输入多组数据,第一行一个数T,表述数据组数。每组数据第一行输入一个数n,表示有n个人参加了聚会,下一行有n个数,di到dn ,di表示第i个人的握手数。 (1≤n≤105 ,输入的所有d之和不超过5×105)

Output

存在这种朋友关系输出YES,反之NO

Sample input and output

Sample Input Sample Output
3
3
0 1 1
3
2 2 2
3
1 1 1
YES
YES
NO

题解:用Havel定理解即可。

握手定理:任意图所有顶点度数之和必为偶数。

度序列:V(G)={v1,v2,....vn},称序列 {d(v1),d(v2),....d(vn)}为度序列。

一个正整数序列(d1,d2,.....,dn)是度序列当且仅当

Havel定理:

一个序列:

是简单图的度序列当且仅当:

算法流程:

设序列有n个元素,d1,d2,....dn

1、若序列中出现负数则无解,若序列全为为0则有解,否则转2。

2、取出序列中最大值dmax,若dmax大于n-1,无解退出。否则取出剩下n-1个元素中前dmax大的dmax个元素,把这些元素依次减1后放回序列中,dmax舍弃,n=n-1。

代码:

 #include <fstream>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue> using namespace std; const int N=;
priority_queue<int> p;
int n;
int a[N],t[N];
bool b; int main()
{
//freopen("D:\\input.in","r",stdin);
//freopen("D:\\output.out","w",stdout);
int T,cnt;
scanf("%d",&T);
while(T--){
cnt=;
b=;
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%d",&a[i]);
cnt+=a[i];
}
if(cnt&) puts("NO");
else{
while(!p.empty()) p.pop();
for(int i=;i<n;i++) p.push(a[i]);
while(!p.empty()){
cnt=p.top();
p.pop();
if(cnt>=n){
b=;
break;
}else if(cnt==){
break;
}
if(p.size()<cnt){
b=;
break;
}else{
for(int i=;i<cnt;i++){
t[i]=p.top()-;
p.pop();
}
if(t[cnt-]<){
b=;
break;
}
for(int i=;i<cnt;i++)
if(t[i]) p.push(t[i]);
n--;
}
}
if(b) puts("YES");
else puts("NO");
}
}
return ;
}

cdoj913-握手 【Havel定理】的更多相关文章

  1. UESTC 913 握手 Havel定理+优先队列

    给定一个非负整数序列{dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化.进一步,若图为简单图,则称此序列可简单图化. 此题因为是无自环无重边,所以是简单图.用判定简单图可图化 ...

  2. POJ1659 Frogs' Neighborhood(Havel定理)

    给一个无向图的度序列判定是否可图化,并求方案: 可图化的判定:d1+d2+……dn=0(mod 2).关于具体图的构造,我们可以简单地把奇数度的点配对,剩下的全部搞成自环. 可简单图化的判定(Have ...

  3. Havel定理

    先贴一个百度百科的注释 Havel定理编辑 本词条缺少概述.名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 中文名 Havel定理 外文名 Canisters theorem 特    ...

  4. LD1-M(简单图的判定+构造,Havel定理)

    题目链接 /* *题目大意: *给出一个图的每个点的度的序列,求能否构成一个简单图,如果能构出简单图,则输出图的邻接矩阵; * *算法思想: *Havel定理的应用; *给定一个非负整数序列{dn}, ...

  5. HDU 2454 Degree Sequence of Graph G(Havel定理 推断一个简单图的存在)

    主题链接:pid=2454">http://acm.hdu.edu.cn/showproblem.php?pid=2454 Problem Description Wang Haiya ...

  6. POJ 1659 Frogs' Neighborhood (Havel定理构造图)

    题意:根据图的度数列构造图 分析:该题可根据Havel定理来构造图.Havel定理对可图化的判定: 把序列排成不增序,即d1>=d2>=……>=dn,则d可简单图化当且仅当d’={d ...

  7. 【Havel 定理】Degree Sequence of Graph G

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=2454 [别人博客粘贴过来的] 博客地址:https://www.cnblogs.com/debug ...

  8. Havel定理 poj1659

    http://blog.csdn.net/xcszbdnl/article/details/14174669 代码风格这里的 Frogs' Neighborhood Time Limit: 5000M ...

  9. 2013长沙 G Graph Reconstruction (Havel-Hakimi定理)

    Graph Reconstruction Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge Let there ...

随机推荐

  1. 使用distillery 实现版本的动态升级&& 动态降级

    备注: distillery  使用很棒的elixir 打包构建工具,下面演示的是升级以及降级   1. 参考项目 https://github.com/rongfengliang/phoenix-r ...

  2. element popover 不显示/不隐藏问题解决方法

    html代码部分 <el-table-column label="操作"> <template slot-scope="scope"> ...

  3. thinkphp3.2.3版本在windows本地apache环境运行正常,上传到centos服务器apache环境中出现:thinkphp 上传根目录不存在!请尝试手动创建:uploads/

    thinkphp 上传根目录不存在!请尝试手动创建:uploads/  ,是根目录下uploads权限问题,我把uploads权限改成了775,就可以上传图片了.     chmod -R 775 u ...

  4. Windows10+CUDA8.0+VS2015+CUDNN5下配置caffe

    [转]https://blog.csdn.net/zhj_matlab/article/details/69943869

  5. UVALive7261(2015ACM/ICPC北京赛区现场赛A)

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

  6. MySQL Join算法与调优白皮书(三)

    Batched Key Access Join Index Nested-Loop Join虽好,但是通过辅助索引进行链接后需要回表,这里需要大量的随机I/O操作.若能优化随机I/O,那么就能极大的提 ...

  7. java 重写 与 重载 用法

    图例: 重写: 其实就是获取其他类 和自己类相同的方法名 来使用 重载: 其实就是创建多个相同的方法名,里面装载不同的参数 重写例子: Super关键字 重载的例子:

  8. 【转】jMeter入门实例

    人们对从认识事物都有一个具体到抽象的过程,学习Jmeter也不例外,通过一个实例来进行学习,一方面可以让初学者有所见即所得的信心,另一方面,其实也是在初学者心中留下了对这事物的一个朦胧的印象,这在以后 ...

  9. 遍历并批量删除容器中元素出现ConcurrentModificationException原因及处置

    在以下四种遍历过程中,前两种会抛出ConcurrentModificationException,而后两种方法是正确的. Department类: package com.sitinspring; i ...

  10. Java 设计模式 之 中介者模式(Mediator)

    中介者的功能非常简单,就是封装对象之间的交互. 如果一个对象的操作会引起其他相关对象的变化,或者是某个操作需要引起其他对象的后续或连带操作,而这个对象又不希望自己来处理这些关系,那么久可以找中介者,把 ...