Havel-Hakimi定理 POJ1659

对于图的所有顶点,计算出每个顶点的度,度序列。给定一个序列判断序列是否可图。

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int map[15][15];
struct vertext {
	int d;
	int num;
}x[15];
bool cmp(vertext a,vertext b) {
	return b.d<a.d;
}
int main() {
	int t,n;
	scanf("%d",&t);
	while(t--) {
		scanf("%d",&n);
		memset(map,0,sizeof map);
		for(int i=0;i<n;i++) {
			scanf("%d",&x[i].d);
			x[i].num=i;
		}
		sort(x,x+n,cmp);
		int flag=0;
		for(int i=0;i<n;i++) {
			sort(x+i,x+n,cmp);
			if(x[i].d>n-i-1) {
				flag=1;break;
			}
			for(int j=i+1;j<=i+x[i].d;j++) {
				map[x[i].num][x[j].num]=map[x[j].num][x[i].num]=1;
				x[j].d--;
				if(x[j].d<0) {
					flag=1;break;
				}
			}
			if(flag==1) break;
			x[i].d=0;
		}
		if(x[n-1].d!=0) flag=1;
		if(flag==0) {
			printf("YES\n");
			for(int i=0;i<n;i++) {
				for(int j=0;j<n;j++) {
					printf("%d",map[i][j]);
					if(j!=n-1) printf(" ");
				}
				printf("\n");
			}
		}
		else printf("NO\n");
		if(t!=0) printf("\n");
	}
	return 0;
}
时间: 2024-10-09 14:12:19

Havel-Hakimi定理 POJ1659的相关文章

Havel定理 poj1659

http://blog.csdn.net/xcszbdnl/article/details/14174669 代码风格这里的 Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 9953   Accepted: 4161   Special Judge Description 未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1

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

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, ..

POJ1659 Frogs&#39; Neighborhood(Havel定理)

给一个无向图的度序列判定是否可图化,并求方案: 可图化的判定:d1+d2+……dn=0(mod 2).关于具体图的构造,我们可以简单地把奇数度的点配对,剩下的全部搞成自环. 可简单图化的判定(Havel定理):把序列排成不增序,即d1>=d2>=……>=dn,则d可简单图化当且仅当d’={d2-1,d3-1,……d(d1+1)-1, d(d1+2),d(d1+3),……dn}可简单图化.简单的说,把d排序后,找出度最大的点(设度为d1),把它与度次大的d1个点之间连边,然后这个点就可以不

UESTC 913 握手 Havel定理+优先队列

给定一个非负整数序列{dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化.进一步,若图为简单图,则称此序列可简单图化. 此题因为是无自环无重边,所以是简单图.用判定简单图可图化的Havel-Hakimi定理. Havel-Hakimi定理: 一个度序列: 是简单图度序列当且仅当: 是简单图的度序列. 简单来讲,算法流程如下: 设度序列为d1,d2,d3....dn 1.如果度序列中元素有负数或者度序列和不为偶数,则肯定不可图. 2.每次取度序列中最大元素,设为M,如果M>

HDU 2454 Degree Sequence of Graph G(Havel定理 判断简单图的存在)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2454 Problem Description 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.

HDU 2454 Degree Sequence of Graph G (可简单图化的判定 havel定理)

题目链接:HDU 2454 Degree Sequence of Graph G 题意:给出N个点的度(简单图),问能能否画出个图,(其实就是给出一个串非负的序列是否有对应的图存在) 没见过这个定理 题意真的难懂. havel定理就是一个给出一串非负的序列,存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化.简单图的话就是,可简单图化. 可简单图化的判定(Havel定理):把序列排成不增序,即d1>=d2>=-->=dn,则d可简单图化当且仅当d'={d2-1,d3-1,-

cdoj913-握手 【Havel定理】

http://acm.uestc.edu.cn/#/problem/show/913 握手 Time Limit: 2000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 一群人参加了一次聚会,其中有一些人是好朋友.一对朋友见面后握手且仅握一次手,并且每个人不会和自己握手(废话!).现在告诉你每个人一共握了几次手,请你判断是否存在一种朋友关系满足每个人的握手数. Input 输入多

POJ 1659 Frogs&#39; Neighborhood 可图性判断-Havel定理

Description 未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N).如果湖泊Li和Lj之间有水路相连,则青蛙Fi和Fj互称为邻居.现在已知每只青蛙的邻居数目x1, x2, ..., xn,请你给出每两个湖泊之间的相连关系. Input 第一行是测试数据的组数T(0 ≤ T ≤ 20).每组数据包括两行,第一行是整数N(2 < N < 10),第二行是N个整数,x1, x2,..., xn(0 ≤ xi ≤ N