poj 1659 Frogs' Neighborhood Havel-Hakimi定理 可简单图定理
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4098136.html
给定一个非负整数序列$D=\{d_1,d_2,...d_n\}$,若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化。进一步,若图为简单图,则称此序列可简单图化。
可图化的判定为:$d_1+d_2+ \cdots +d_n=0(mod2)$。即把奇数度的点配对,剩下的变为自环。
可简单图化的判定,即Havel-Hakimi定理:
我们把序列$D$变换为非增序列,即$d_1\geq d_2\geq \cdots \geq d_n$,则$D$可简单图化当且仅当$D'=(d_2-1, d_3-1, \cdots ,d_{(d1+1)}-1, d_{d1+2}, d_{d1+3}, \cdots ,d_n)$可简单图化。
证明:
<--:若$D'$可简单图化,把原图$G_D$中的最大度点与$G_{D'}$中度最大的$d_1$个点连边即可,图$G_D$必为简单图。
-->:若$D$可简单图化,设得到的简单图为$D_G$。分两种情况考虑:
(a)若$G_D$中存在边$(v_1,v_2), (v_1,v_3), \dots ,(v_1,v_{d_1+1})$,则删除这些边得简单图$G_{D'}$,于是$D'$可简单图化为$G_{D'}$
(b)若存在点$v_i,v_j(i<j)$且$(v_1,v_i)$不在$G_D$中,但$(v_1,v_j)$在$G_D$中。这时,因为$d_i \geq d_j$,必存在$k$使得$(v_i, v_k)$在$D_G$中但$(v_j,v_k)$不在$G_D$中。这时我们可以令$G''=G_D-\{(v_i,v_k),(v_1,v_j)\}+\{(v_k,v_j),(v_1,v_i)\}$。$G''$的度序列仍为$D$,使用情况(a)处理。
例如对于下图,我们删除两条打红X的边,添加两条虚线的边,即可转化为$G''$
代码实现很简单,每次对数组arr排序,然后对于arr[1],arr[2],...,arr[arr[0]]每个数减一,并另arr[0]=0。重复n次,最后检验数组是否全部为0,是则输出YES和图,否则输出NO。
需要注意的是输出格式,每两个case之间需要输出一个空行。
代码如下:
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <algorithm>
#define MAXN 11
using namespace std;
class node
{
public:
int id;
int degree;
bool operator < (const node & a)const
{
return degree>a.degree;
}
};
int n;
node arr[MAXN];
int map[MAXN][MAXN];
void solve()
{
memset(map, , sizeof(map));
for( int i = ; i < n ; i++ )
{
sort(arr, arr+n);
for( int j = ; j <= arr[].degree ; j++ )
{
arr[j].degree -= ;
map[arr[].id][arr[j].id] = ;
map[arr[j].id][arr[].id] = ;
}
arr[].degree = ;
}
for( int i = ; i < n ; i++ )
{
if( arr[i].degree < )
{
printf("NO\n\n");
return ;
}
}
printf("YES\n");
for( int i = ; i < n ; i++ )
{
for( int j = ; j < n ; j++ )
{
printf("%d%c", map[i][j], j==(n-)?'\n':' ');
}
}
printf("\n");
}
int main(int argc, char *argv[])
{
int t;
scanf("%d", &t);
while( t-- )
{
scanf("%d", &n);
for( int i = ; i < n ; i++ )
{
scanf("%d", &arr[i].degree);
arr[i].id = i;
}
solve();
}
}
poj 1659 Frogs' Neighborhood Havel-Hakimi定理 可简单图定理的更多相关文章
- POJ 1659 Frogs' Neighborhood(可图性判定—Havel-Hakimi定理)【超详解】
Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 9897 Accepted: 41 ...
- POJ 1659 Frogs' Neighborhood (Havel定理构造图)
题意:根据图的度数列构造图 分析:该题可根据Havel定理来构造图.Havel定理对可图化的判定: 把序列排成不增序,即d1>=d2>=……>=dn,则d可简单图化当且仅当d’={d ...
- poj 1659 Frogs' Neighborhood (DFS)
http://poj.org/problem?id=1659 Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total S ...
- POJ 1659 Frogs' Neighborhood(Havel-Hakimi定理)
题目链接: 传送门 Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Description 未名湖附近共有N个大小湖泊L ...
- POJ 1659 Frogs' Neighborhood (Havel--Hakimi定理)
Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 10545 Accepted: 4 ...
- POJ1659 Frogs' Neighborhood(Havel–Hakimi定理)
题意 题目链接 \(T\)组数据,给出\(n\)个点的度数,问是否可以构造出一个简单图 Sol Havel–Hakimi定理: 给定一串有限多个非负整数组成的序列,是否存在一个简单图使得其度数列恰为这 ...
- poj 1659 Frogs' Neighborhood (贪心 + 判断度数序列是否可图)
Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 6076 Accepted: 26 ...
- poj 1659 Frogs' Neighborhood( 青蛙的邻居)
Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 9639 Accepted: 40 ...
- poj 1659 Frogs' Neighborhood(出入度、可图定理)
题意:我们常根据无向边来计算每个节点的度,现在反过来了,已知每个节点的度,问是否可图,若可图,输出一种情况. 分析:这是一道定理题,只要知道可图定理,就是so easy了 可图定理:对每个节点的度从 ...
随机推荐
- Servlet---JavaWeb技术的核心基础,JavaWeb框架的基石(二)
一.Servlet之Request Web服务器会对收到的每一次客户端http请求分别创建一个用于代表请求的request对象和代表响应的response对象.要获取客户端提交的数据需 ...
- iOS开发——设备篇Swift篇&判断设备类型
判断设备类型 1,分割视图控制器(UISplitViewController) 在iPhone应用中,使用导航控制器由上一层界面进入下一层界面. 但iPad屏幕较大,通常使用SplitViewCo ...
- Fedora 20 安装后的一些事情
1.关闭selinux 可以在软件中,找到selinux管理工具:system-config-selinux.py 2.安装源 可以通过# ls -l /etc/yum.repos.d 查看现有的安装 ...
- Centos 安装KScope1.6.2
准备工作:安装ctags graphviz,和cscope (可以用yum install来安装) 1.首先下载kscope,最好下载16.x的版本,这个最好的 下载kscope-1.6.2.tar ...
- 由c#的值类型与引用类型说开去
之前一直被灌输,C#分值类型和引用类型,在程序运行时,它们分别存在栈(Stack) 和堆(Heap)上.这也是面试经典问题了,但其实其中存在很大的误解.比如某个实例对象中有一个Int型成员.当这个实例 ...
- Oracle中exists与in的区别
有两个简单例子,以说明 "exists"和"in"的效率问题 1) select * from T1 where exists(select 1 from T2 ...
- controller,link,compile不同
测试案例 .directive('testDirective', function() { return { restrict: 'E', template: '<p>Hello {{nu ...
- CF Fox And Names (拓扑排序)
Fox And Names time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- Oracle_11g中解决被锁定的scott用户的方法(转载)
转自:http://www.2cto.com/database/201402/277206.html Oracle 11g中修改被锁定的用户:scott 在安装完Oracle11g和创建完oracle ...
- Scala的基本语法总结
Scala的函数: 目前博客园中的代码编辑器中还不支持Scala语言....用的Java代码的存储方式 object TestScala { def main(args: Array[String]) ...