题目链接:http://poj.org/problem?id=1659

Time Limit: 5000MS   Memory Limit: 10000K

Description

未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N)。如果湖泊LiLj之间有水路相连,则青蛙FiFj互称为邻居。现在已知每只青蛙的邻居数目x1, x2, ..., xn,请你给出每两个湖泊之间的相连关系。

Input

第一行是测试数据的组数T(0 ≤ T ≤ 20)。每组数据包括两行,第一行是整数N(2 < N < 10),第二行是N个整数,x1, x2,..., xn(0 ≤ xi ≤ N)。

Output

对输入的每组测试数据,如果不存在可能的相连关系,输出"NO"。否则输出"YES",并用N×N的矩阵表示湖泊间的相邻关系,即如果湖泊i与湖泊j之间有水路相连,则第i行的第j个数字为1,否则为0。每两个数字之间输出一个空格。如果存在多种可能,只需给出一种符合条件的情形。相邻两组测试数据之间输出一个空行。

Sample Input

3
7
4 3 1 5 4 2 1 
6
4 3 1 4 2 0 
6
2 3 1 1 2 1

Sample Output

YES
0 1 0 1 1 0 1 
1 0 0 1 1 0 0 
0 0 0 1 0 0 0 
1 1 1 0 1 1 0 
1 1 0 1 0 1 0 
0 0 0 1 1 0 0 
1 0 0 0 0 0 0

NO

YES
0 1 0 0 1 0 
1 0 0 1 1 0 
0 0 0 0 0 1 
0 1 0 0 0 0 
1 1 0 0 0 0 
0 0 1 0 0 0

Problem solving report:

Description: 有n个点,给出n个点分别与其它几个点相连,输出他们的相连关系图。
Problem solving: havel-hakimi定理(http://www.docin.com/p-540438846.html)。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct vertex {int index;int degree;
}v[15];
int n, map[15][15];
bool cmp(struct vertex A, struct vertex B) {return A.degree > B.degree;
}
bool Havel() {for (int i = 0; i < n - 1; i++) {sort(v + i, v + n, cmp);int t1 = v[i].index;for (int j = i + 1; j <= i + v[i].degree; j++) {v[j].degree--;if (v[j].degree < 0)return false;int t2 = v[j].index;map[t1][t2] = map[t2][t1] = 1;}}if (v[n - 1].degree)return false;return true;
}
int main() {int t;scanf("%d", &t);while (t--) {scanf("%d", &n);memset(map, 0, sizeof(map));for (int i = 0; i < n; i++) {v[i].index = i;scanf("%d", &v[i].degree);}if (Havel()) {printf("YES\n");for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++)printf("%d ", map[i][j]);printf("\n");}}else printf("NO\n");if (t)printf("\n");}return 0;
}

POJ - Frogs' Neighborhood(Havel-Hakimi)相关推荐

  1. POJ1659 Frogs' Neighborhood(Havel定理)

    题目: Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 9932   Accepted ...

  2. POJ 1659 Frogs‘ Neighborhood (Havel 定理)

    Havel 定理: 序列的可图:给出一个 由非负整数组成的序列,如果是某个无向图的度序列,则称该序列是可图的. 而 Havel 定理,就是判断序列的可图的方法.先按度数从大到小排序, 每次处理完度数一 ...

  3. Havel—Hakimi定理(度序列)

    对于图的所有顶点,我们可以统计出每个顶点的度.像这样的一串数字,我们称之为:度序列.那么反过来,给定一个序列,能否判断这个序列是可图的呢?这里有一个定理:Havel-Hakimi定理可以用来判定一个序 ...

  4. Havel–Hakimi算法学习笔记(哈维尔算法)详细【Python】

    问题 来源离散数学的图论中 第一个接触到的算法:Havel–Hakimi算法 (哈维尔算法) 判断一个非负序列是否为某无向简单图的度数列的方法(Pyhton代码) 前提提要 1.无向简单图 首先先了解 ...

  5. POJ 1659 Frogs#39; Neighborhood(度序列组成)

    意甲冠军  中国 依据Havel-Hakimi定理构图即可咯  先把顶点按度数从大到小排序  可图的话  度数大的顶点与它后面的度数个顶点相连肯定是满足的  出现了-1就说明不可图了 #include ...

  6. poj pku图论、网络流入门题总结、汇总

    poj pku图论.网络流入门题总结.汇总 分类: acm图论 2010-08-25 18:49 243人阅读 评论(0) 收藏 举报 网络算法networkgraphconstructioninte ...

  7. NOIP 好题推荐(DP+搜索+图论)POJ ZOJ

    NOIP好题推荐(DP+搜索+图论)POJ ZOJ 1370 Gossiping (数论->模线性方程有无解的判断)+(图论->DFS)  1090 Chain ->格雷码和二进制码 ...

  8. POJ 图论分类 + DP(较全 自己又加了点)

    DP -----------动态规划 状态压缩DP 2411 (棋盘规模较大)状态压缩DP+DFS+滚动数组 2664 (棋盘规模较小)直接递推即可(DP) 2506 (棋盘规模较小)直接递推即可(D ...

  9. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

最新文章

  1. MySQL面试题 | 附答案解析(十九)
  2. 20T数据、百万奖金,同济和武大摘得开放数据创新应用大赛桂冠!
  3. 一文带你学会基于SpringAop实现操作日志的记录
  4. android 结束if循环_Android 消息机制(Handler + MessageQueue + Looper)
  5. 你不知道的CDN圈内黑话有哪些?
  6. 从事前端开发必须要了解的CSS原理(转)
  7. 总奖池120万!中国“马栏山”杯国际音视频算法大赛启动
  8. CentOS搭建Git服务器
  9. 3.3 tensorflow2实现Mann - Whitney U统计量检验法 ——python实战
  10. AD9361官方例程发送端数据流向
  11. BP神经网络的基本思想,bp神经网络原理简述
  12. VelocityTracker笔记
  13. wagtail 实现中英文
  14. gitee上贡献度不显示问题的设置
  15. 潇潇雨祭--(我很好的朋友的一篇讲述爱情的文章!)
  16. 获取连续生成的100-200范围的随机数,直到生成的随机数与前一个随机数相等,停止运行
  17. 拓嘉辰丰:把握拼多多改价技巧,降低降权风险
  18. Android 语音播报 , 百度在线语音合成封装;
  19. 更改Mysql数据库密码
  20. 【编程题】【Scratch三级】2022.06 五彩糖葫芦

热门文章

  1. nexus 4 android 5.0,真是亲儿子 Nexus 4可升安卓5.1
  2. std__vector介绍
  3. C++--数值的整数次方
  4. c语言海报,C语言 竞选海报
  5. PS10修复工具组(人物祛斑),PS12强大的画笔工具(手绘),PS13铅笔工具(颜色替换)
  6. Win11硬盘怎么分区?Win11固态硬盘分区教程
  7. datadog-define-tags by AOP
  8. 微信小程序(微信开发者工具及工程创建、小程序配置、逻辑层、模块化)
  9. coso全称是什么_京东方全称是什么
  10. Android Proguard混淆详解