Havel-Hakimi定理(握手定理)

news/2023/12/10 2:05:27

Havel-Hakimi定理(握手定理)

由非负整数组成的非增序列s(度序列):d1,d2,…,dn(n>=2,d1>=1)是可图的,当且仅当序列:

s1:d2 – 1,d3 – 1,…,dd1+1 – 1,dd1+2,…,dn

是可图的。序列s1中有n-1个非负整数,s序列中d1后的前d1个度数(即d2~dd1+1)减1后构成s1中的前d1个数。

说白了就是先把第一个点(度数为d1)连线到后面d1个点,保证第一个点度数满足,然后再以此类推考虑后面的点。如果后面所有顶点满足并且度数不多不少(最后不剩,过程中没有度数为负数),即可认为,度序列是可图的。

为什么每一次都要排成非递增序列后再操作?因为这样是最好判断的,最后都成0就可图,中途出现负数就不可图。如果不排成非递增就不好判断了,比如最后0,1,0,1是可图的;0,2,0,2不可图,还有各种最终情况,很难写代码去判断可图不可图。

由同一个可图序列构造出来的图不一定是唯一的。

例题poj1659

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<set>
#include<list>
#include<deque>
#include<vector>
#include<algorithm>
#include<stack>
#include<queue>
#include<cctype>
#include<sstream>
using namespace std;
#define pii pair<int,int>
#define LL long long int
const double eps=1e-10;
const int INF=1000000000;
const int maxn=10+3;int ans[maxn][maxn];
int T,n;
struct node
{int id,de;
} x[maxn];bool cmp(node a,node b)
{return a.de>b.de;
}int main()
{//freopen("in1.txt","r",stdin);//freopen("out.txt","w",stdout);scanf("%d",&T);while(T--){scanf("%d",&n);for(int i=0; i<n; i++){scanf("%d",&x[i].de);x[i].id=i+1;}memset(ans,0,sizeof(ans));int tn=n;bool can=1;while(tn>0){sort(x,x+n,cmp);if(x[0].de==0) break;for(int i=1; i<=x[0].de; i++){if(x[i].de>0&&i<n){x[i].de--;ans[x[0].id][x[i].id]=ans[x[i].id][x[0].id]=1;}else{can=false;break;}}if(can==false) break;x[0].de=0;tn--;}if(can==true){puts("YES");for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(j==1)    printf("%d",ans[i][j]);else   printf(" %d",ans[i][j]);}puts("");}}else puts("NO");if(T>=1) puts("");}//fclose(stdin);//fclose(stdout);return 0;
}
View Code

 

转载于:https://www.cnblogs.com/zywscq/p/4819978.html


https://dhexx.cn/news/show-16958.html

相关文章

vscode在html看到图片的插件_三个强大的PPT插件工具

今天分享三个强大的PPT插件工具&#xff0c;我知道&#xff0c;很多同学都不需要做很专业的PPT&#xff0c;只要不是太丑&#xff0c;看得过去&#xff0c;直接套用模板就可以了。即使我们自己会做专业的PPT&#xff0c;但是也会偷懒&#xff0c;直接套用模板&#xff0c;差一点…

IOS开发网络篇—数据安全

一、简单说明 1.说明 在开发应用的时候&#xff0c;数据的安全性至关重要&#xff0c;而仅仅用POST请求提交用户的隐私数据&#xff0c;还是不能完全解决安全问题。 如&#xff1a;可以利用软件&#xff08;比如Charles&#xff09;设置代理服务器&#xff0c;拦截查看手机的请…

javaweb 图书管理系统完整代码_基于Java web的图书管理系统

源码编号&#xff1a;B-E00029点击查看(分类规则)项目类型&#xff1a;Java EE项目(非开源)项目名称&#xff1a;基于Java web的图书管理系统(library_system)当前版本&#xff1a;V2.0.2版本难度等级&#xff1a;✩✩复杂程度&#xff1a;✩✩ 点击查看难度等级用户类型&#…

python学习笔记24(路径与文件 (os.path包, glob包))

python学习笔记24&#xff08;路径与文件 (os.path包, glob包)&#xff09; os.path模块主要用于文件的属性获取&#xff0c;在编程中经常用到&#xff0c;以下是该模块的几种常用方法。 >>> import os.path >>> path /home/ethon/doc/file.txt >>>…

代码和普通的java_【Java基础】2、Java中普通代码块,构造代码块,静态代码块区别及代码示例...

Java中普通代码块&#xff0c;构造代码块&#xff0c;静态代码块区别及代码示例。Java中普通代码块&#xff0c;构造代码块&#xff0c;静态代码块区别及代码示例执行顺序&#xff1a;静态代码块>静态方法(main方法)>构造代码块>构造方法。其中静态代码块在jvm加载类的…

imp 日志_海贼王:罗杰航海日志公开,把2个 “冥王”留给了路飞

本平台为了热爱漫画&#xff0c;热爱壁纸美图和热爱二次元的朋友们而建&#xff0c; 仅作兴趣分享。如有侵权请联系删除。声明&#xff1a;本公众号所有图片均来源于网络&#xff0c;如有侵权或违法行为&#xff0c;请及时告知删除。本公众号所有资源仅用于漫迷学习交流&#x…

【Linux导论】Linux发行版本(Linux Distributions)

原文 LFS101x.2 Introduction to Linux (Linux Foundation) Chapter 01: The Linux Foundation - Section 3: Course Linux Requirements Chapter 02: Linux Philosophy and Concepts - Section 5: Linux Distributions Chapter 01: The Linux Foundation - Section 3: Course …

c++检测鼠标处颜色_你,值得一看:罗技新品Pebble鹅卵石鼠标简评

点击上方蓝色字体&#xff0c;关注我们2018到2019年的转折点&#xff0c;在12月底&#xff0c;作为数码科技大厂的“罗技”发布了第一个新品—— 罗技Pebble鹅卵石无线蓝牙静音双模轻薄型鼠标 一经发售&#xff0c;就引起了广大用户的各色评价&#xff0c;到底这次罗技的这个鹅…

c++ graphics 旋转_数码产品 篇二十一:壹号本推出运维迷你笔记本,专为工程师打造,7寸大小屏幕可旋转_笔记本电脑...

2020-11-05 20:54:500点赞0收藏0评论创作立场声明&#xff1a;我在本文中评测的这款电脑&#xff0c;来自壹号本送测。体验之后感受颇多&#xff0c;第一时间发出来和大家分享&#xff0c;欢迎理性观点交流碰撞。小睡作为一名电气工程师&#xff0c;经常会去客户现场调试各种设…

IOS多选单选相册图片

之前做项目让实现多选相册的图片,自己写了一个demo一直保存在电脑上,今天下午发现电脑128G的容量已经快没有了,准备清理电脑,所以把之前做的一些demo放在博客上,以后方便用。 1.首先准备3个图片 2.定义单元格PhoCollectionViewCell #import <UIKit/UIKit.h>typedef void(…