POJ1659 Frogs' Neighborhood(Havel定理)
题目:
Frogs' Neighborhood
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 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定理)相关推荐
- POJ 1659 Frogs‘ Neighborhood (Havel 定理)
Havel 定理: 序列的可图:给出一个 由非负整数组成的序列,如果是某个无向图的度序列,则称该序列是可图的. 而 Havel 定理,就是判断序列的可图的方法.先按度数从大到小排序, 每次处理完度数一 ...
- [matlab]havel定理证明(笔记)
[matlab]havel定理证明 是否可以由度序列生成简单图是图论中一个重要的内容. havel定理是解决这一问题的重要方法. havel定理证明 问题引出 简单图化问题 简单图 简单图即是指图上不 ...
- 图的度序列:Havel定理
给定一个非负整数序列{d1,d2,...dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化.进一步,若图为简单图,则称此序列可简单图化. 可图化的判定比较简单:d1+d2+.. ...
- CF411H 被遗忘的树 Havel定理 || 网络流
全场只有3个人A的题扔过来当今天的T4.Orz DWX大爷考试时A掉这道题 网络流做法是题解做法,上CF就能看到 但是我们还有其他的方法! 我们有Havel定理的某条推论,既然这是一个树,那么某个子联 ...
- 【Havel 定理】Degree Sequence of Graph G
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=2454 [别人博客粘贴过来的] 博客地址:https://www.cnblogs.com/debug ...
- 图的基本概念、握手定理、Havel定理
图 图论被广泛应用在计算机科学.运筹学.信息论.控制论.网络理论.博弈论.化学.生物学.物理学.社会科学.语言学等领域: 图论的应用方向1:以理论计算机科学和信息科学为研究背景,探索图论在计算机科学和 ...
- POJ - Frogs' Neighborhood(Havel-Hakimi)
题目链接:http://poj.org/problem?id=1659 Time Limit: 5000MS Memory Limit: 10000K Description 未名湖附近共有N个大 ...
- 图论-度序列可图性判断(Havel-Hakimi定理)
0.可图:一个非负整数组成的序列如果是某个无向图的度序列,则该序列是可图的. 1.度序列:Sequence Degree,若把图G所有顶点的度数排成一个序列,责成该序列为图G的一个序列.该序列可以是非 ...
- Havel—Hakimi定理(度序列)
对于图的所有顶点,我们可以统计出每个顶点的度.像这样的一串数字,我们称之为:度序列.那么反过来,给定一个序列,能否判断这个序列是可图的呢?这里有一个定理:Havel-Hakimi定理可以用来判定一个序 ...
最新文章
- mysql主从复制replication的一些相关命令
- pytorch维度统计
- tcpdump 识别成dns_为什么总能看到广告弹窗?没错,就是DNS的问题
- python编程if语法-二、python 语法之变量赋值与if(if else)
- phpstorm 控制台运行
- python划分数据集用pandas_用pandas划分数据集实现训练集和测试集
- 大三时候实现的,关于大整数(超过long范围)加减乘除操作的头文件,并包含了实现RSA加解密的函数...
- 使用uni-app报错this.setData is not a function
- SpringMVC 集成 mybatisPlus
- 题目243-交换输出
- java汇编指令_汇编指令test的用法
- 产品管理:四步法新产品开发流程
- python步长为负数_Python步长应用步进为负数时遇到的问题,python步长,python分片步长为负...
- chrome操作系统_Google Chrome操作系统:事实与谬论
- lxr-0.3.1 源码阅读 How To.
- 2021物理化学实验4:液体饱和蒸气压的测定
- Win10系统中很多磁盘碎片怎么进行整理?
- android 接收闹钟广播,Android获取第三方闹钟的闹铃信息
- JavaWeb之网上书城案例低保真
- [安卓系统导航升级系统,车机升级系统]汽车系统升级更新,诺威达k2201升级包
热门文章
- evga x58服务器芯片组,何谓板皇?四大顶级X58主板巅峰对决
- ITK:可视化静态稀疏Malcolm 2D水平集图层
- h5前端IE浏览器低版本判断及升级提示
- Linux下通过NetLink获取网口信息
- 小米5s+刷+android+8.0,小米MIUI10技术难点已突破,小米5S系列升级安卓8.0看来稳了...
- 2012意大利之行3:罗马的路和车_我是亲民_新浪博客
- 读懂 Android 中的代码混淆
- hadoop心跳机制解析
- 爬虫入门实战第一站——梨视频视频爬取
- 11月20日 如何在场景开启Debug,自定义AI任务,EQS,创建自己的环境任务,使用Pawn环境检测来检测周围的环境,让AI动作更顺滑(动画混合