cdoj913-握手 【Havel定理】
http://acm.uestc.edu.cn/#/problem/show/913
握手
Time Limit: 2000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
一群人参加了一次聚会,其中有一些人是好朋友。一对朋友见面后握手且仅握一次手,并且每个人不会和自己握手(废话!)。现在告诉你每个人一共握了几次手,请你判断是否存在一种朋友关系满足每个人的握手数。
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 |
YES |
题解:用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定理】的更多相关文章
- UESTC 913 握手 Havel定理+优先队列
给定一个非负整数序列{dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化.进一步,若图为简单图,则称此序列可简单图化. 此题因为是无自环无重边,所以是简单图.用判定简单图可图化 ...
- POJ1659 Frogs' Neighborhood(Havel定理)
给一个无向图的度序列判定是否可图化,并求方案: 可图化的判定:d1+d2+……dn=0(mod 2).关于具体图的构造,我们可以简单地把奇数度的点配对,剩下的全部搞成自环. 可简单图化的判定(Have ...
- Havel定理
先贴一个百度百科的注释 Havel定理编辑 本词条缺少概述.名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 中文名 Havel定理 外文名 Canisters theorem 特 ...
- LD1-M(简单图的判定+构造,Havel定理)
题目链接 /* *题目大意: *给出一个图的每个点的度的序列,求能否构成一个简单图,如果能构出简单图,则输出图的邻接矩阵; * *算法思想: *Havel定理的应用; *给定一个非负整数序列{dn}, ...
- HDU 2454 Degree Sequence of Graph G(Havel定理 推断一个简单图的存在)
主题链接:pid=2454">http://acm.hdu.edu.cn/showproblem.php?pid=2454 Problem Description Wang Haiya ...
- POJ 1659 Frogs' Neighborhood (Havel定理构造图)
题意:根据图的度数列构造图 分析:该题可根据Havel定理来构造图.Havel定理对可图化的判定: 把序列排成不增序,即d1>=d2>=……>=dn,则d可简单图化当且仅当d’={d ...
- 【Havel 定理】Degree Sequence of Graph G
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=2454 [别人博客粘贴过来的] 博客地址:https://www.cnblogs.com/debug ...
- Havel定理 poj1659
http://blog.csdn.net/xcszbdnl/article/details/14174669 代码风格这里的 Frogs' Neighborhood Time Limit: 5000M ...
- 2013长沙 G Graph Reconstruction (Havel-Hakimi定理)
Graph Reconstruction Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge Let there ...
随机推荐
- 借助CustomBehaviorsLibrary.dll写出水印效果(转)
在项目中载入这个dll 之后引用 使用方法具体如下图: 在这里需要注意到是项目中对interactivity的引用 : 好文要顶 关注我 收藏该文
- 简单安装MySQL(RPM方式)
本次测试使用一台ip为192.168.2.21的虚拟机 下边的步骤虽然多,但是跟着命令或者复制粘贴命令即可完成操作,并无难点 1.安装准备 MySQL-server-5.6.35-1.linux_gl ...
- Shell脚本一键安装LNMP环境
https://sourceforge.net/projects/opensourcefile/files/ Nginx是一款高性能的HTTP和反向代理服务器.Nginx在反向代理,Rewrite规则 ...
- 树的遍历——pat1043
http://pat.zju.edu.cn/contests/pat-a-practise/1043 给予N个数字组成二叉搜索树,判断这个数列是否由先序遍历得出或是镜像先序遍历得出,若是则输出相应的后 ...
- tensorboard的使用
# -*- coding: utf-8 -*- """ Created on: 2017/10/29 @author : Shawn function : "& ...
- 报错:Can't find a source file at "xxxxx“Locate the file or edit the source lookup path to include its location.
调试问题: Can't find a source file at "/tmp/TI_MKLIB6sLCzz/SRC/exit.c" Locate the file or edit ...
- 给scrapy添加代理IP
request.meta['proxy'] = 'http://'+'175.42.123.111:33995'
- Filter command
1. grep egrep fgrep 2. sort sort -d sort -n sort -r sort -f 3. uniq uniq -d uniq -u uniq -c 4. ...
- 第八章 Health Check
8.1 默认的健康检查 每个容器启动时会执行一个进程,此进程由Dockerfile的CMD或ENTRYPOINT指定.如果进程退出时返回码非零,则认为容器发生故障,K8s就会根据restartPoli ...
- Codeforces-591C题解
一.题目链接 http://codeforces.com/problemset/problem/591/C 二.题意 给定一个只含数字0和1的数组,通过如下方式,变成不再变化的01组合,最少需要操作几 ...