POJ1659 Frogs' Neighborhood(Havel–Hakimi定理)
题意
\(T\)组数据,给出\(n\)个点的度数,问是否可以构造出一个简单图
Sol
Havel–Hakimi定理:
- 给定一串有限多个非负整数组成的序列,是否存在一个简单图使得其度数列恰为这个序列。
令\(S=(d_1,d_2,\dots,d_n)\)为有限多个非负整数组成的非递增序列。 S可简单图化当且仅当有穷序列\(S’=(d_2-1,d_3-1,...,d(d_1+1)-1,d(d_1+2),...,d_n)\)只含有非负整数且是可简单图化的。
最后判断一下是否都是零就好了
感觉这个算法。。就是个贪心吧。。
当然判断这类问题的可行性还有另外一种方法:Erdős–Gallai定理
令\(S=(d_1,d_2,...,d_n)\)为有限多个非负整数组成的非递增序列。\(S\)可简单图化当且仅当这些数字的和为偶数,并且
\(\sum_{i = 1}^k d_i \leqslant k(k - 1) + \sum_{i = k + 1}^n min(d_i, k)\)
对所有\(1 \leqslant k \leqslant n\)都成立
不过这个好像没办法输出方案??。。。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#define Pair pair<int, int>
#define MP(x, y) make_pair(x, y)
#define fi first
#define se second
using namespace std;
const int MAXN = 1e5 + 10, INF = 1e9 + 7;
inline int read() {
char c = getchar(); int x = 0, f = 1;
while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
int T, N, reach[101][101], sum = 0;
Pair a[MAXN];
void init() {
memset(reach, 0, sizeof(reach));
sum = 0;
}
int main() {
// freopen("a.in", "r", stdin);
T = read();
while(T--) {
init();
N = read();
for(int i = 1; i <= N; i++) a[i] = MP(read(), i), sum += a[i].fi;
if(sum % 2 != 0) {puts("NO\n"); continue;}
bool f = 0;
for(int i = 1; i <= N; i++) {
sort(a + i, a + N + 1, greater<Pair>());
if(a[i].fi <= 0) continue;
for(int j = i + 1; j <= i + a[i].fi; j++) a[j].fi -= 1, reach[a[i].se][a[j].se] = 1, reach[a[j].se][a[i].se] = 1;
a[i].fi = 0;
}
for(int i = 1; i <= N; i++) if(a[i].fi != 0) {puts("NO\n"); f = 1; break;}
if(f) continue;
puts("YES");
for(int i = 1; i <= N; i++, puts(""))
for(int j = 1; j <= N; j++)
printf("%d ", reach[i][j]);
puts("");
}
}
/*
1
6
4 3 1 4 2 0
*/
POJ1659 Frogs' Neighborhood(Havel–Hakimi定理)的更多相关文章
- POJ1659 Frogs' Neighborhood(青蛙的邻居) Havel-Hakimi定理
Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 8729 Accepted: 36 ...
- POJ 1659 Frogs' Neighborhood (Havel--Hakimi定理)
Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 10545 Accepted: 4 ...
- poj1659 Frogs' Neighborhood
Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 10239 Accepted: 4 ...
- POJ1659 Frogs' Neighborhood(Havel定理)
给一个无向图的度序列判定是否可图化,并求方案: 可图化的判定:d1+d2+……dn=0(mod 2).关于具体图的构造,我们可以简单地把奇数度的点配对,剩下的全部搞成自环. 可简单图化的判定(Have ...
- POJ 1659 Frogs' Neighborhood (Havel定理构造图)
题意:根据图的度数列构造图 分析:该题可根据Havel定理来构造图.Havel定理对可图化的判定: 把序列排成不增序,即d1>=d2>=……>=dn,则d可简单图化当且仅当d’={d ...
- POJ 1659 Frogs' Neighborhood(可图性判定—Havel-Hakimi定理)【超详解】
Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 9897 Accepted: 41 ...
- POJ 1659 Frogs' Neighborhood(Havel-Hakimi定理)
题目链接: 传送门 Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Description 未名湖附近共有N个大小湖泊L ...
- 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 ...
随机推荐
- 常用系统的伪静态规则列表(rewrite)
以前在云虚拟机上,是在iis上配置伪静态.这次买的一个香港的空间,商家说把伪静态规则直接放在web下即可. 注意,所有规则放在一起可能会有冲突,只放置你需要的规则即可. #shopex4.8 Rewr ...
- Luogu P1156 垃圾陷阱 DP
f[i][j]表示在第i个垃圾,高度为j的最大生命值 转移分三部分: 如果j>=当前垃圾的高度,且两个垃圾间的时间小于等于上一个状态f[i-1][j-a[i].v]的生命值,则可以垫高度 如果j ...
- C# 关于Grid下动态删除行列的操作
假设我们有以下布局 <Grid x:Name="Grid" ShowGridLines="True"> <Grid.RowDefinition ...
- ZOJ - 3623 完全背包变种
题意理解有误导致方程建歪,题意是n种类型的船造成至少L伤害的最小时间,攻击过程是不必同步的 #include<iostream> #include<algorithm> #in ...
- 再谈java枚举 ENUM
[From] http://www.cnblogs.com/rollenholt/archive/2012/11/27/2790402.html 没有枚举之前: 在没有枚举之前,我们想列举一些相关的常 ...
- maven tomcat eclipse 配置 debug
1.单击Eclipse菜单"Run"中的"Run Configurations". 2.在弹出的对话框中的左侧树中找"到Maven Build&quo ...
- java.lang.IllegalArgumentException: Result Maps collection already contains value for xxx
本人项目产生此问题的原因是: 本地备份了一份xxxmapper.xml的副本“xxxmapper - 副本.xml”,应该是系统会自动加载“mappe”目录下的所有xml文件. 参考:https:// ...
- shell 实现文件改名
修改文件名可以有不同的命令方式,mv 可以实现,但是使用rename 这种专业的改名字很好 对于单个的文件,可以直接使用以上的命令,那如果有大量的类似格式的文件名需要修改成其他格式的,该如何呢? 创建 ...
- HTML盒子尺寸的计算
参考链接http://edu.51cto.com/lesson/id-54739.html
- ubuntu安装卸载软件
sudo apt-get remove nagios3 #卸载软件 sudo apt-get autoremove #卸载依附软件包 rpm格式 安装:rpm -ivh *** 查看:rpm -q * ...