Frogs' Neighborhood
Time Limit: 5000MS   Memory Limit: 10000K
Total Submissions: 9639   Accepted: 4051   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 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
//本题的意思是给定一个非负的整数序列,稳是不是一个可图的序列
//需要根据Havel-hakimi定理的方法来构图
//不合理的情况:
//1.对剩下的序列排序后,最大的度数(设为d1)超出了剩下的顶点数
//2.对最大度数后面的d1个度数各减1后,出现了负数
#include<queue>
#include<stack>
#include<math.h>
#include<stdio.h>
#include<numeric>//STL数值算法头文件
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<functional>//模板类头文件
using namespace std; #define N 100
struct vertex
{
int degree;//顶点的度
int index;//顶点的序号
} v[N];
int cmp(const void *a,const void *b)
{
return ((vertex*)b)->degree-((vertex*)a)->degree;
} int main()
{
int r,k,p,q;//循环变量
int i,j;//顶点序号(用于确定图中边的两个顶点)
int d1;//对剩下的序列排序后第1个顶点(度数最大的顶点)的度数
int T,n;//测试数据个数,湖泊个数
int edge[N][N],flag;//邻接矩阵,是否存在合理乡里关系的标志
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(i=0; i<n; i++)
{
scanf("%d",&v[i].degree);
v[i].index=i;
}
memset(edge,0,sizeof(edge));
flag=1;
for(k=0; k<n&&flag; k++)
{
//对v数组后n-k个元素按非递增顺序排序
qsort(v+k,n-k,sizeof(vertex),cmp);//各参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针
i=v[k].index;//第k个顶点的序号
d1=v[k].degree;
if(d1>n-k-1) flag=0;
for(r=1; r<=d1&&flag; r++)
{
j=v[k+r].index;//后边d1个顶点中每个顶点的序号
if(v[k+r].degree<=0) flag=0;
v[k+r].degree--;
edge[i][j]=edge[j][i]=1;
}
}
if(flag)
{
puts("YES");
for(p=0; p<n; p++)
{
for(q=0; q<n; q++)
{
if(q) printf(" ");
printf("%d",edge[p][q]);
}
puts(" ");//换行
}
}
else printf("NO\n");
if(T) puts(" ");
}
return 0;
}
//可以根据Havel-hakimi定理推一遍
//把i和d1输出,分别代表序号和度
//每组i和d1如果满足条件,再把j输出,j代表d1后面每个顶点的序号
//1
//7
//4 3 1 5 4 2 1
//3 5
//4
//0
//1
//5
//6
//0 3
//4
//1
//2
//4 2
//5
//1
//1 0 不满足第二层for循环的条件则只输出i和d1
//2 0
//6 0
//5 0

poj 1659 Frogs' Neighborhood( 青蛙的邻居)的更多相关文章

  1. poj 1659 Frogs' Neighborhood (DFS)

    http://poj.org/problem?id=1659 Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total S ...

  2. poj 1659 Frogs' Neighborhood (贪心 + 判断度数序列是否可图)

    Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 6076   Accepted: 26 ...

  3. POJ 1659 Frogs' Neighborhood(可图性判定—Havel-Hakimi定理)【超详解】

    Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 9897   Accepted: 41 ...

  4. POJ1659 Frogs' Neighborhood(青蛙的邻居) Havel-Hakimi定理

    Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 8729   Accepted: 36 ...

  5. POJ 1659 Frogs' Neighborhood(Havel-Hakimi定理)

    题目链接: 传送门 Frogs' Neighborhood Time Limit: 5000MS     Memory Limit: 10000K Description 未名湖附近共有N个大小湖泊L ...

  6. POJ 1659 Frogs' Neighborhood (Havel--Hakimi定理)

    Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 10545   Accepted: 4 ...

  7. Poj 1659.Frogs' Neighborhood 题解

    Description 未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N).如果湖泊Li和Lj之间有水路相连,则青蛙Fi和 ...

  8. POJ 1659 Frogs' Neighborhood (贪心)

    题意:中文题. 析:贪心策略,先让邻居多的选,选的时候也尽量选邻居多的. 代码如下: #pragma comment(linker, "/STACK:1024000000,102400000 ...

  9. poj 1659 Frogs' Neighborhood(出入度、可图定理)

    题意:我们常根据无向边来计算每个节点的度,现在反过来了,已知每个节点的度,问是否可图,若可图,输出一种情况. 分析:这是一道定理题,只要知道可图定理,就是so easy了  可图定理:对每个节点的度从 ...

随机推荐

  1. 也谈matlab中读取视频的一个重要函数mmreader

    也谈matlab中读取视频的一个重要函数mmreader 在matlab中输入help mmreader来查阅一下该函数,有如下信息: MMREADER Create a multimedia rea ...

  2. 正则表达式:Python 模块 re 简介

    为了使文章更具可读性,本文将正则表达式冗长的 语法介绍 放在了文章的末尾. 一.正则表达式简介 正则表达式(RegExp)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(元字符 ...

  3. $this->success传递数据

    public function index_edit_doExport() { $search=$_POST['id']; $this->success(U('Tongji/index_edit ...

  4. 在Unity中实现屏幕空间反射Screen Space Reflection(4)

    第四部分讲一下如何在2D屏幕空间步进光线. http://casual-effects.blogspot.com/2014/08/screen-space-ray-tracing.html 中的代码感 ...

  5. python mysql参数化查询防sql注入

    一.写法 cursor.execute('insert into user (name,password) value (?,?)',(name,password)) 或者 cursor.execut ...

  6. Ubuntu 下 CodeBlocks 修改用户自定义颜色主题 及 更新CodeBlocks到最新版本

    Code::Blocks默认的白色编辑器界面看久了眼睛很累, 所以想换成dark的主题, 眼睛会舒服些. 1. 安装好codeblocks后, 先运行一次, 关闭, 这时程序会提示你是否要保存defa ...

  7. python作业高级FTP(第八周)

    作业需求: 1. 用户加密认证 2. 多用户同时登陆 3. 每个用户有自己的家目录且只能访问自己的家目录 4. 对用户进行磁盘配额.不同用户配额可不同 5. 用户可以登陆server后,可切换目录 6 ...

  8. Linux内存高,触发oom-killer问题解决

    最近遇到两起Linux的内存问题,其一是触发了oom-killer导致系统挂 1. 首先确认该系统的版本是32位 ? #uname -a Linux alarm 2.6.9-67.ELsmp #1 S ...

  9. 在Linux 系统上运行多个tomcat

    --原来的不动,添加环境变量(.bash_profile)export JAVA_HOME=/home/public/jdk1.8.0_131export JRE_HOME=$JAVA_HOME/jr ...

  10. [写出来才有价值系列:node.js]node.js 01-介绍及安装

    对于Node.js在百度百科上是这样解释的: Node.js是一个Javascript运行环境(runtime).实际上它是对Google V8引擎进行了封装.V8引 擎执行Javascript的速度 ...