uva10720 - Graph Construction(Havel-Hakimi定理)

题目:uva10720 - Graph Construction(Havel-Hakimi定理)

题目大意:给出N个点,并且给出每个点的度,问能否形成简单图。

解题思路:一开始自己写想了些形成简单图的条件,例如度数之和是偶数,度数的一半也就是简单图的边不能超过n * (n - 1) / 2,每个顶点的度数都应该小于总的顶点个数,但后面发现这些只是必要的条件。后来看了题解发现大神们都是用Havel-Hakimi定理。

定理大致内容就是每次都将度数最大的点拿出来,然后分别和每个顶点形成一条边,这样这个点的度为0,然后后面的m(这个顶点的度)个点度都要减1。这样这个点就可以不用在考虑了,然后类似的处理后面的点。如果中间有出现度数为负的就说明形成不了简单图。最后所有的点的度都为0就说明可以。

代码:

#include <stdio.h>
#include <algorithm>
#include <functional>
using namespace std;

const int N = 10005;
int vec[N], n;

int solve () {//Havel-Hakimi定理

	for (int i = 0; i < n; i++) {

		sort (vec + i, vec + n, greater<int>());
		if (vec[i] > n - i - 1)
			return 0;
		for (int j = i + 1; j < i + 1 + vec[i]; j++) {

			vec[j]--;
			if (vec[j] < 0)
				return 0;
		}
		vec[i] = 0;
	}
	return 1;
}

int main () {

	while (scanf ("%d", &n), n) {

		for (int i = 0; i < n; i++)
			scanf ("%d", &vec[i]);

		printf ("%s\n", solve() ? "Possible": "Not possible");
	}
	return 0;
}
时间: 2024-10-07 14:43:11

uva10720 - Graph Construction(Havel-Hakimi定理)的相关文章

Havel–Hakimi algorithm(判断度数序列是否可图)

问题 J: Degree Sequence of Graph G 时间限制: 1 Sec  内存限制: 128 MB 题目描述 Wang Haiyang is a strong and optimistic Chinese youngster. Although born and brought up in the northern inland city Harbin, he has deep love and yearns for the boundless oceans. After gr

uva 10720 Graph Construction(贪心)

这道题目其实挺简单的,uva上通过率却很低,今天晚上的第二道题,什么时候一个晚上我能做4道中等难度的题目 我就满意了... 思路:本来我是想着排序后然后遍历数组,将当前i的后面a[i]个值一次减一,然后继续遍历继续重复这样做,里面 包含着条件,如果有数变成负数就不成立,或者后面的点小于当前的度数也不成立,然后就TLE了,这个方法是错误 的,因为当序列为 4 4 3 3 2 2的时候最后一个2就会比前面变成1的数字大,需要重新排序的...我是稍微瞄 了一眼别人提交的代码才想起来的,每次处理最大数字

POJ 1659 Frogs&#39; Neighborhood(可图性判定—Havel-Hakimi定理)【超详解】

Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 9897   Accepted: 4137   Special Judge Description 未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N).如果湖泊Li和Lj之间有水路相连,则青蛙Fi和Fj互称为邻居.现在已知每只青蛙的邻居数目x1, x2, ..

欧拉回路基本概念及定理

转 http://www.cnblogs.com/luyingfeng/p/3877338.html 1. 欧拉通路.欧拉回路.欧拉图无向图:1) 设G是连通无向图,则称经过G的每条边一次并且仅一次的路径为欧拉通路:2) 如果欧拉通路是回路(起点和终点是同一个顶点),则称此回路为欧拉回路(Euler circuit):3) 具有欧拉回路的无向图G称为欧拉图(Euler graph).有向图:1) 设D是有向图,D的基图连通,则称经过D的每条边一次并且仅一次的有向路径为有向欧拉通路:2) 如果有向

一线开发者在Reddit上讨论深度学习框架:PyTorch和TensorFlow到底哪个更好?

本文标签:   机器学习 TensorFlow Google深度学习框架 分布式机器学习 PyTorch   近日,Reddit用户 cjmcmurtrie 发了一个主题为「PyTorch vs. TensorFlow」的讨论帖,想要了解这两大流行的框架之间各自有什么优势. 原帖地址:https://redd.it/5w3q74 帖子一楼写道: 我还没有从 Torch7 迁移到 TensorFlow.我玩过 TensorFlow,但我发现 Torch7 更加直观(也许是我玩得不够?).我也尝试了

java代码优化框架 soot

soot是一个可以接收java source code, bytecode, 及 android apk的代码优化框架,由于其提供了四种中间表达形式,使得分析更方便,因此也用来做代码分析. soot支持call graph construction, point to analysis等. 四种中间表达形式: baf, jimple, shimple, grimpl,这里主要了解jimple jimple: typed, 3-address, statement based In Jimple,

CVPR 2015 papers

CVPR2015 Papers震撼来袭! CVPR 2015的文章可以下载了,如果链接无法下载,可以在Google上通过搜索paper名字下载(友情提示:可以使用filetype:pdf命令). Going Deeper With ConvolutionsChristian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke

Tensorflow学习笔记(2):变量,常用类和一些操作

变量是用来存储和更新参数的,也就是网络中的W或b.变量会被放在内存中.当模型训练结束后,他们需要被存在硬盘上,以便将来使用或分析模型. 一.变量 创建和初始化 当创建一个变量的时候,需要将一个Tensor作为初始值传入构造函数Variable().这个初始值可以是随机值也可以是常量.Tensor的初始值需要指定shape,这个shape通常都是固定的,但是也可以通过一些高级方法重新调整. 只是创建了变量还是不够的,需要在定义一个初始化的操作,并且在使用任何变量之前,运行初始化的操作.例: 1 i

UVA题目分类

题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics 10300 - Ecological Premium 458 - The Decoder 494 - Kindergarten Counting Game 414 - Machined Surfaces 490 - Rotating Sentences 445 - Marvelous Mazes