题目:

Frogs' Neighborhood
Time Limit: 5000MS   Memory Limit: 10000K
Total Submissions: 9932   Accepted: 4152   Special Judge

Description

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

Input

第一行是测试数据的组数T(0 ≤ T ≤ 20)。每组数据包括两行,第一行是整数N(2 < N < 10),第二行是N个整数,x1x2,..., 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 NOYES
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

Source

POJ Monthly--2004.05.15 Alcyone@pku

[Submit]   [Go Back]   [Status]   [Discuss]

思路:

这个是Havel定理的应用,关于Havel定理:Havel-Hakimi定理(判断一个序列是否可图)

首先我们对这个序列进行排序,然后找出最大的度数n,然后在这个排好序的序列中对接下来的n个数进行减一,如果出现两种情况就证明这个序列不可图,否则就就在邻接矩阵中把这两个点连起来

①某次对剩下的序列排序后,最大的度数超过了剩下的顶点数

②对最大的度数后面的n个度数进行减1后,出现了负数

如果出现了这两种情况,那么这个序列不可图

我们用一个结构体来记录一个顶点的度数和这个顶点的标号,具体看代码

代码:

#include <cstdio>
#include <cstring>
#include <string>
#include <set>
#include <iostream>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <algorithm>
#define mem(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define mod 10000007
#define debug() puts("what the fuck!!!")
#define N (1010000)
#define ll long long
using namespace std;
struct node
{int degree,id;//顶点的度数和标号
} v[20];
int map[20][20];
bool cmp(node a,node b)
{return a.degree>b.degree;
}
int main()
{int t,n,flag;scanf("%d",&t);while(t--){scanf("%d",&n);for(int i=0; i<n; i++){scanf("%d",&v[i].degree);v[i].id=i;//记录顶点的编号}mem(map,0);flag=1;for(int k=0; k<n; k++){sort(v+k,v+n,cmp);//从第k位开始,对整个数组排序int i=v[k].id;//当前要连的顶点的编号int d1=v[k].degree;//记录当前这个节点的度数if(d1>n-k-1)//当当前节点的度数比剩余的顶点数要大的时候,则不存在相连的关系flag=0;for(int r=1; r<=d1&&flag; r++)//从当前点开始给后面的度数减一{int j=v[k+r].id;//当前要连的顶点的编号if(v[k+r].degree<=0)//出现负值代表不存在相连的关系flag=0;v[k+r].degree--;map[i][j]=map[j][i]=1;}}if(flag){puts("YES");for(int i=0; i<n; i++){for(int j=0; j<n; j++){if(j)printf(" ");printf("%d",map[i][j]);}puts("");}}elseputs("NO");if(t)puts("");}return 0;
}

POJ1659 Frogs' Neighborhood(Havel定理)相关推荐

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

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

  2. [matlab]havel定理证明(笔记)

    [matlab]havel定理证明 是否可以由度序列生成简单图是图论中一个重要的内容. havel定理是解决这一问题的重要方法. havel定理证明 问题引出 简单图化问题 简单图 简单图即是指图上不 ...

  3. 图的度序列:Havel定理

    给定一个非负整数序列{d1,d2,...dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化.进一步,若图为简单图,则称此序列可简单图化. 可图化的判定比较简单:d1+d2+.. ...

  4. CF411H 被遗忘的树 Havel定理 || 网络流

    全场只有3个人A的题扔过来当今天的T4.Orz DWX大爷考试时A掉这道题 网络流做法是题解做法,上CF就能看到 但是我们还有其他的方法! 我们有Havel定理的某条推论,既然这是一个树,那么某个子联 ...

  5. 【Havel 定理】Degree Sequence of Graph G

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=2454 [别人博客粘贴过来的] 博客地址:https://www.cnblogs.com/debug ...

  6. 图的基本概念、握手定理、Havel定理

    图 图论被广泛应用在计算机科学.运筹学.信息论.控制论.网络理论.博弈论.化学.生物学.物理学.社会科学.语言学等领域: 图论的应用方向1:以理论计算机科学和信息科学为研究背景,探索图论在计算机科学和 ...

  7. POJ - Frogs' Neighborhood(Havel-Hakimi)

    题目链接:http://poj.org/problem?id=1659 Time Limit: 5000MS   Memory Limit: 10000K Description 未名湖附近共有N个大 ...

  8. 图论-度序列可图性判断(Havel-Hakimi定理)

    0.可图:一个非负整数组成的序列如果是某个无向图的度序列,则该序列是可图的. 1.度序列:Sequence Degree,若把图G所有顶点的度数排成一个序列,责成该序列为图G的一个序列.该序列可以是非 ...

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

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

最新文章

  1. mysql主从复制replication的一些相关命令
  2. pytorch维度统计
  3. tcpdump 识别成dns_为什么总能看到广告弹窗?没错,就是DNS的问题
  4. python编程if语法-二、python 语法之变量赋值与if(if else)
  5. phpstorm 控制台运行
  6. python划分数据集用pandas_用pandas划分数据集实现训练集和测试集
  7. 大三时候实现的,关于大整数(超过long范围)加减乘除操作的头文件,并包含了实现RSA加解密的函数...
  8. 使用uni-app报错this.setData is not a function
  9. SpringMVC 集成 mybatisPlus
  10. 题目243-交换输出
  11. java汇编指令_汇编指令test的用法
  12. 产品管理:四步法新产品开发流程
  13. python步长为负数_Python步长应用步进为负数时遇到的问题,python步长,python分片步长为负...
  14. chrome操作系统_Google Chrome操作系统:事实与谬论
  15. lxr-0.3.1 源码阅读 How To.
  16. 2021物理化学实验4:液体饱和蒸气压的测定
  17. Win10系统中很多磁盘碎片怎么进行整理?
  18. android 接收闹钟广播,Android获取第三方闹钟的闹铃信息
  19. JavaWeb之网上书城案例低保真
  20. [安卓系统导航升级系统,车机升级系统]汽车系统升级更新,诺威达k2201升级包

热门文章

  1. evga x58服务器芯片组,何谓板皇?四大顶级X58主板巅峰对决
  2. ITK:可视化静态稀疏Malcolm 2D水平集图层
  3. h5前端IE浏览器低版本判断及升级提示
  4. Linux下通过NetLink获取网口信息
  5. 小米5s+刷+android+8.0,小米MIUI10技术难点已突破,小米5S系列升级安卓8.0看来稳了...
  6. 2012意大利之行3:罗马的路和车_我是亲民_新浪博客
  7. 读懂 Android 中的代码混淆
  8. hadoop心跳机制解析
  9. 爬虫入门实战第一站——梨视频视频爬取
  10. 11月20日 如何在场景开启Debug,自定义AI任务,EQS,创建自己的环境任务,使用Pawn环境检测来检测周围的环境,让AI动作更顺滑(动画混合