poj 1659 Frogs' Neighborhood( 青蛙的邻居)
Time Limit: 5000MS | Memory Limit: 10000K | |||
Total Submissions: 9639 | Accepted: 4051 | Special Judge |
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)。
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( 青蛙的邻居)的更多相关文章
- poj 1659 Frogs' Neighborhood (DFS)
http://poj.org/problem?id=1659 Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total S ...
- poj 1659 Frogs' Neighborhood (贪心 + 判断度数序列是否可图)
Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 6076 Accepted: 26 ...
- POJ 1659 Frogs' Neighborhood(可图性判定—Havel-Hakimi定理)【超详解】
Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 9897 Accepted: 41 ...
- POJ1659 Frogs' Neighborhood(青蛙的邻居) Havel-Hakimi定理
Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 8729 Accepted: 36 ...
- POJ 1659 Frogs' Neighborhood(Havel-Hakimi定理)
题目链接: 传送门 Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Description 未名湖附近共有N个大小湖泊L ...
- POJ 1659 Frogs' Neighborhood (Havel--Hakimi定理)
Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 10545 Accepted: 4 ...
- Poj 1659.Frogs' Neighborhood 题解
Description 未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N).如果湖泊Li和Lj之间有水路相连,则青蛙Fi和 ...
- POJ 1659 Frogs' Neighborhood (贪心)
题意:中文题. 析:贪心策略,先让邻居多的选,选的时候也尽量选邻居多的. 代码如下: #pragma comment(linker, "/STACK:1024000000,102400000 ...
- poj 1659 Frogs' Neighborhood(出入度、可图定理)
题意:我们常根据无向边来计算每个节点的度,现在反过来了,已知每个节点的度,问是否可图,若可图,输出一种情况. 分析:这是一道定理题,只要知道可图定理,就是so easy了 可图定理:对每个节点的度从 ...
随机推荐
- Codeforces Round #419 (Div. 2) A-E
上紫啦! E题1:59压哨提交成功翻盘 (1:00就做完了调了一个小时,还好意思说出来? (逃)) 题面太长就不复制了,但是配图很可爱所以要贴过来 九条可怜酱好可爱呀 A - Karen and Mo ...
- 【洛谷 P3299】 [SDOI2013]保护出题人 (凸包,三分,斜率优化)
题目链接 易得第\(i\)关的最小攻击力为\(\max_{j=1}^i\frac{sum[i]-sum[j-1]}{x+d*(i-j)}\) 十分像一个斜率式,于是看作一个点\(P(x+d*i,sum ...
- 转:修改shape的文字
Sub 修改shape的文字()'' 修改shape的文字 宏' ' ActiveSheet.Shapes.Range(Array("Flowchart: Connector 193& ...
- eWebEditor复制粘贴图片时过滤域名
1.找到form.js 路径:plugins/frame/scripts/form.js 这个方法: 2.替换这个方法 /** * 处理参数 */ Form.prototype.processReqP ...
- selenium启动chrome模拟器模拟手机
一.如果chrome选项里边有这个模拟设备(比如iPhone 6 Plus): 1.先启动Selenium Grid, 比如命令:java -jar selenium-server-standalon ...
- Android检测富文本中的<img标签并实现点击效果
本文旨在:通过点击一张图片Toast输出位置与url链接. 闲话少说,实现原理大概是酱紫的::通过正则表达式检测富文本内的图片集合并获取url,在src=“xxx” 后面添加 onclick方法,至于 ...
- log4j生成日志
Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程等:我们也可 ...
- gc 调优记录
qps 10,0000 -Xms10240m -Xmx10240m -XX:NewRatio=5 -XX:SurvivorRatio=6 2017-12-19T15:10:14.539+0800: 1 ...
- 实习day2:@2X图片,git,coding.net,
@2X是5和6系列的图片,@3X是6P等大屏的图片 本公司目前只用@2X的图片适配. 比如20X27的图片 1x, 就是原始大小: 用2X, 就除以2,变成10X13.5: 如果用3X的, 就除以3, ...
- JAVA实现图的邻接表以及DFS
一:定义邻接表结构储存图 package 图的遍历; //邻接表实现图的建立 //储存边 class EdgeNode { int index; // 习惯了用index,其实标准写法是(adjVer ...