【Havel 定理】Degree Sequence of Graph G
【题目链接】
http://acm.hdu.edu.cn/showproblem.php?pid=2454
【别人博客粘贴过来的】
博客地址:https://www.cnblogs.com/debugcool/archive/2011/04/23/HDOJ2454.html
一句话,顶点的度序列 Havel 定理~
定义:给出一个无向图的顶点度序列 {dn},要求判断能否构造出一个简单无向图。
分析:
贪心的方法是每次把顶点按度大小从大到小排序,取出度最大的点Vi,依次和度较大的那些顶点Vj连接,同时减去Vj的度。连接完之后就不再考虑Vi了,剩下的点再次排序然后找度最大的去连接……这样就可以构造出一个可行解。
判断无解有两个地方,若某次选出的Vi的度比剩下的顶点还多,则无解;若某次Vj的度减成了负数,则无解。
至于什么是Havel定理,上面这个构造过程就是了~
定理的简单证明如下:
(<=)若d'可简单图化,我们只需把原图中的最大度点和d'中度最大的d1个点连边即可,易得此图必为简单图。
(=>)若d可简单图化,设得到的简单图为G。分两种情况考虑:
(a)若G中存在边,则把这些边除去得简单图G',于是d'可简单图化为G'
(b)若存在点Vi,Vj使得i=dj,必存在k使得(Vi, Vk)在G中但(Vj,Vk)不在G中。这时我们可以令GG=G-{(Vi,Vk),(V1,Vj)}+{(Vk,Vj),(V1,Vi)}。GG的度序列仍为d,我们又回到了情况(a)。
【自己的理解】
真的非常感谢上面这位大哥提供的博客解析,不然我都自闭一下午了。
其实如果单纯想的话我只是想到匹配罢了,根本想不到居然可以有这样的定理。
这个Havel定理,其实是一个判断依据。
1、按照度数从大到小排序,然后依次建边。
2、建边的过程就是以该点为起点,其余都是它的目标点,然后大家都度减一
注意!!!!一定是前k大的。
最后就是判断这个度数组,是否为全零。
下面就是代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std ; const int N = 1e3 + ;
int a[N] ; int main()
{
int T , n ;
for ( cin >> T ; T ; T-- ){
int tot = , edge = ;
cin >> n ;
//for( int i=1;i<=n;i++ ) cin >> a[i] ; for( int i=;i<=n;i++ ){
cin >> a[i] ;
tot += a[i] ;
} // 判断 入度和出度
if( tot & ) {
printf("no\n");
continue;
}
// 排序,从大到小
sort ( a+, a++n , [](int u,int v){return u>v;} ); bool flag = true ;
for(int i = ; flag && i <= n ; i++ ){
for(int j=i+ ; a[i] && j<=n ;j++ ){
if( a[j] == ) continue;
a[i] -- ;
a[j] -- ;
}
//注意每次操作完都需要取前K大的.
sort( a+i+ , a++n ,[](int u,int v){return u>v;} ) ;
}
for(int i=;i<=n;i++){
//cout << a[i] << " ";
if( a[i] != ){
flag = false ;
}
}
if( flag ) puts("yes");
else puts("no");
}
return ;
}
Degree Sequence of Graph G
【Havel 定理】Degree Sequence of Graph G的更多相关文章
- HDU 2454 Degree Sequence of Graph G(Havel定理 推断一个简单图的存在)
主题链接:pid=2454">http://acm.hdu.edu.cn/showproblem.php?pid=2454 Problem Description Wang Haiya ...
- Hdoj 2454.Degree Sequence of Graph G 题解
Problem Description Wang Haiyang is a strong and optimistic Chinese youngster. Although born and bro ...
- HDU 2454"Degree Sequence of Graph G"(度序列可图性判断)
传送门 参考资料: [1]:图论-度序列可图性判断(Havel-Hakimi定理) •题意 给你 n 个非负整数列,判断这个序列是否为可简单图化的: •知识支持 握手定理:在任何无向图中,所有顶点的度 ...
- HDU 2454 Degree Sequence of Graph G——可简单图化&&Heavel定理
题意 给你一个度序列,问能否构成一个简单图. 分析 对于可图化,只要满足度数之和是偶数,即满足握手定理. 对于可简单图化,就是Heavel定理了. Heavel定理:把度序列排成不增序,即 $deg[ ...
- hdu 2454 Degree Sequence of Graph G (推断简单图)
///已知各点的度,推断是否为一个简单图 #include<stdio.h> #include<algorithm> #include<string.h> usin ...
- hdu 2454 Degree Sequence of Graph G(可简单图化判定)
传送门 •Havel-Hakimi定理: 给定一个非负整数序列{d1,d2,...dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化. 进一步,若图为简单图,则称此序列可简单图 ...
- LD1-M(简单图的判定+构造,Havel定理)
题目链接 /* *题目大意: *给出一个图的每个点的度的序列,求能否构成一个简单图,如果能构出简单图,则输出图的邻接矩阵; * *算法思想: *Havel定理的应用; *给定一个非负整数序列{dn}, ...
- cdoj913-握手 【Havel定理】
http://acm.uestc.edu.cn/#/problem/show/913 握手 Time Limit: 2000/1000MS (Java/Others) Memory Limit ...
- POJ 1659 Frogs' Neighborhood (Havel定理构造图)
题意:根据图的度数列构造图 分析:该题可根据Havel定理来构造图.Havel定理对可图化的判定: 把序列排成不增序,即d1>=d2>=……>=dn,则d可简单图化当且仅当d’={d ...
随机推荐
- fiddler无法生成证书
在win7有可能无法生成证书打开安装Fiddler的路径下,按住shift 右击在此处打开命令行窗口 输入以下命令 makecert.exe -r -ss my -n "CN=DO_NO ...
- 【转】mysql基础汇总
mysql基础知识语法汇总整理(二) 原文:https://www.cnblogs.com/cxx8181602/p/9525950.html 连接数据库操作 /*连接mysql*/ mysql - ...
- docker-compose部署微服务
1.安装docker-compose curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose ...
- Leetcode题目279.完全平方数(动态规划-中等)
题目描述: 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示例 1: 输入: n = 12 输出: 3 解 ...
- POJ 2488 -- A Knight's Journey(骑士游历)
POJ 2488 -- A Knight's Journey(骑士游历) 题意: 给出一个国际棋盘的大小,判断马能否不重复的走过所有格,并记录下其中按字典序排列的第一种路径. 经典的“骑士游历”问题 ...
- ubuntu更换源的方法
1.查看ubuntu版本的方法: 使用命令 sudo lsb_release -a 输出如下: root@localhost:/etc/apt# sudo lsb_release -aNo LSB m ...
- 在业务控制方法中写入User,Admin多个模型收集参数
1) 可以在业务控制方法中书写1个模型来收集客户端的参数 2) 模型中的属性名必须和客户端参数名一一对应 3) 这里说的模型不是Model对象,Model是向视图中封装的数据 @Controll ...
- Javah提示未找到 ..的类
Javah相关错误,如下图所示:
- numpy基本方法总结
NumPy基本方法 一.数组方法 创建数组:arange()创建一维数组:array()创建一维或多维数组,其参数是类似于数组的对象,如列表等 读取数组元素:如a[0],a[0,0] 数组变形:如b= ...
- Qt编写自定义控件14-环形进度条
前言 环形进度条,用来展示当前进度,为了满足大屏UI的需要特意定制,以前有个叫圆环进度条,不能满足项目需要,只能重新定做,以前的进度间距不能自适应分辨率,而且当前进度对应的反的进度不能单独设置颜色,即 ...