博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cdoj913-握手 【Havel定理】
阅读量:5922 次
发布时间:2019-06-19

本文共 1285 字,大约阅读时间需要 4 分钟。

握手

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

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

Input

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

Output

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

Sample input and output

Sample Input Sample Output
330 1 132 2 231 1 1
YESYESNO

 

 

 

题解:用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。

代码

1 #include 
2 #include
3 #include
4 #include
5 #include
6 7 using namespace std; 8 9 const int N=100005;10 priority_queue
p;11 int n;12 int a[N],t[N];13 bool b;14 15 int main()16 {17 //freopen("D:\\input.in","r",stdin);18 //freopen("D:\\output.out","w",stdout);19 int T,cnt;20 scanf("%d",&T);21 while(T--){22 cnt=0;23 b=1;24 scanf("%d",&n);25 for(int i=0;i
=n){37 b=0;38 break;39 }else if(cnt==0){40 break;41 }42 if(p.size()

转载地址:http://mkivx.baihongyu.com/

你可能感兴趣的文章
一个线程封装类
查看>>
贪心算法
查看>>
把JScript函数模拟为"异步执行"方式
查看>>
7.13. rename file
查看>>
(第二天)原型、继承
查看>>
activiti bpmnModel使用
查看>>
《剑指offer》青蛙跳台阶
查看>>
关于MYSQL DML(UPDATE DELETE)中的子查询问题和ERROR 1093 (HY000)错误
查看>>
MAHOUT_LOCAL is not set; adding HADOOP_CONF_DIR to classpath.
查看>>
MySQL备份恢复第一篇
查看>>
数据泵导出出现ORA-31617错误
查看>>
【故障处理】因AIX异步IO没有开启导致SQL*Plus不可用
查看>>
[20160325]bbed 中文字符显示的显示问题
查看>>
移动开发中Fiddler的那些事儿 (转)
查看>>
2年SQL Server DBA调优方面总结
查看>>
php5.3日常操作
查看>>
WPF自定义控件与样式(13)-自定义窗体Window & 自适应内容大小消息框MessageBox
查看>>
对话管理的一些思考
查看>>
基于.net开发chrome核心浏览器【三】
查看>>
ORA-00392 ORA-00312 日志正在清除故障
查看>>