HDU2454 图的基本性质

                Degree Sequence of Graph G

                                            Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
                                                                Total Submission(s): 1123 Accepted Submission(s): 437

Problem Description

Wang Haiyang is a strong and optimistic Chinese youngster. Although born and brought up in the northern inland city Harbin, he has deep love and yearns for the boundless oceans. After graduation, he came to a coastal city and got
a job in a marine transportation company. There, he held a position as a navigator in a freighter and began his new life.

The cargo vessel, Wang Haiyang worked on, sails among 6 ports between which exist 9 routes. At the first sight of his navigation chart, the 6 ports and 9 routes on it reminded him of Graph Theory that he studied in class at university. In the way that Leonhard
Euler solved The Seven Bridges of Knoigsberg, Wang Haiyang regarded the navigation chart as a graph of Graph Theory. He considered the 6 ports as 6 nodes and 9 routes as 9 edges of the graph. The graph is illustrated as below.

According to Graph Theory, the number of edges related to a node is defined as Degree number of this node.

Wang Haiyang looked at the graph and thought, If arranged, the Degree numbers of all nodes of graph G can form such a sequence: 4, 4, 3,3,2,2, which is called the degree sequence of the graph. Of course, the degree sequence of any simple graph (according to
Graph Theory, a graph without any parallel edge or ring is a simple graph) is a non-negative integer sequence?

Wang Haiyang is a thoughtful person and tends to think deeply over any scientific problem that grabs his interest. So as usual, he also gave this problem further thought, As we know, any a simple graph always corresponds with a non-negative integer sequence.
But whether a non-negative integer sequence always corresponds with the degree sequence of a simple graph? That is, if given a non-negative integer sequence, are we sure that we can draw a simple graph according to it.?

Let's put forward such a definition: provided that a non-negative integer sequence is the degree sequence of a graph without any parallel edge or ring, that is, a simple graph, the sequence is draw-possible, otherwise, non-draw-possible. Now the problem faced
with Wang Haiyang is how to test whether a non-negative integer sequence is draw-possible or not. Since Wang Haiyang hasn't studied Algorithm Design course, it is difficult for him to solve such a problem. Can you help him?

Input

The first line of input contains an integer T, indicates the number of test cases. In each case, there are n+1 numbers; first is an integer n (n<1000), which indicates there are n integers in the sequence; then follow n integers,
which indicate the numbers of the degree sequence.

Output

For each case, the answer should be "yes"or "no" indicating this case is "draw-possible" or "non-draw-possible"

Sample Input


2
6 4 4 3 3 2 2
4 2 1 1 1

Sample Output


yes
no

Source

2008 Asia Regional Harbin

Recommend

gaojie

题解:上课老师说给出结点的度 能否判断这个图是否为简单图 然后说了这道题 回来顺便给A了 首先能构成简单图 各个节点的度

相加是偶数 然后利用贪心不断对数组存储的度更新 比如 4 4 3 3 2 2 a[0]=4,利用性质更新 a[1]-1=3, a[2]-1=2,a[3]-1=2,a[4]-1=1, 最

后a[0]=0;再次排序 如果数组出现负数 那么直接跳出循环 证明不是简单图 如果a[0]=0 证明数组里都为0 此时可以判断是简单图

#include <iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;

int cmp(int a ,int b)
{
    return a>b;
}
int main()
{
    int t,n,a[1001];
    scanf("%d",&t);
    while(t--)
    {
        memset(a,0,sizeof(a));
        int sum=0;
        scanf("%d",&n);
        for(int i=0; i<n; i++)
        {
            scanf("%d",&a[i]);
            sum+=a[i];
        }
        if(sum%2)
            cout<<"no"<<endl;
        else
        {
            int f=0;
            for(int k=0; k<n; k++)
            {
                sort(a,a+n,cmp);
                if(a[0]==0)
                {
                    f=1;
                    break;
                }
                for(int i=0; i<a[0]; i++)
                {
                    a[i+1]--;
                    if(a[i+1]<0)
                    {
                        f=2;
                        break;
                    }
                }
                a[0]=0;
                if(f==2)
                    break;
            }
            if(f==1)
                cout<<"yes"<<endl;
            if(f==2)
                cout<<"no"<<endl;
        }
    }
    return 0;
}
时间: 2024-10-04 11:29:23

HDU2454 图的基本性质的相关文章

[新闻会客厅]孙雁:八零后的女闪客

在Flash江湖中,"哎呀呀"是个响当当的人物,是网上当之无愧的骨灰级美女"闪客".如今,26岁的她领着十几个人,在动漫行业大展拳脚.这十几个人不叫她"老板",也不叫她的名字孙雁,而叫她的网名"哎呀呀".作为动漫行业的从业者,他们知道,"哎呀呀"3个字,远比孙雁要响亮得多. 她是"闪林四大天王"唯一的一位女性,是网上当之无愧的元老级美女"闪客".她创立的个人网站被相关

《程序设计解题策略》——1.5 利用动态树维护森林的连通性

1.5 利用动态树维护森林的连通性 本节将介绍一种特殊的数据结构--动态树(dynamic tree).在正式介绍动态树之前,我们先来分析一个带有普遍性的问题.1.5.1 动态树的问题背景 给出一棵共有n(n≤10000)个节点的树,每条边都有一个权值,要求维护一个数据结构,支持如下操作: 操作1--修改某条边的权值. 操作2--询问某两个节点之间唯一通路上的最大边权. 其中操作的总次数为q. 对于操作2,我们很容易想到一种算法:先求出被询问的两节点的最近公共祖先,然后分别求出这两个节点至最近公

从清华到阿里,他只用6年时间,影响了数亿用户

"阿里技术直播",是专为技术人量身制作的视频直播节目,旨在分享行业前沿趋势.技术干货和技术人生.今天为大家送上阿里资深算法专家靖世的精彩直播内容. 大家好,我名字叫盖坤,在阿里花名叫靖世.之前在清华大学读的本科跟博士,专业是机器学习跟人工智能.毕业之后一直在阿里巴巴做广告算法,现在在阿里妈妈负责竞争展示广告技术,做的工作包括广告算法,广告算法里面包括匹配算法.预估模型.排序算法,也包括广告工程部分.还有其它相关跟人工智能相关的部分,包括机器学习平台,包括计算机视觉里面有图象识别等等,也

详解Android开发之MP4文件转GIF文件_Android

一 基本实现原理 在介绍具体实现过程之前,先简单说下基本原理和实现步骤,在解决相对比较复杂的问题,我习惯先理清主要原理步骤,不要一开始就被繁琐细节绊住,待具体实现时再逐个攻破.下面是主要步骤:      1.视频文件的读取:包括录制和本地文件读取       2.将需要转换的视频部分解析为 Bitmap 序列      3.将解析好的 Bitmap 序列编码生成 GIF 文件 二 视频文件的读取 视频文件的读取比较简单,没什么特别需要说的地方,这里简单贴出视频读取的核心部分代码,详细实现可以Go

OpenCascade中的Delaunay三角剖分

Delaunay Triangulation in OpenCascade eryar@163.com 摘要:本文简要介绍了Delaunay三角剖分的基础理论,并使用OpenCascade的三角剖分算法将边界BRep表示的几何体进行三角离散化后在OpenSceneGraph中显示. 关键字:Delaunay Triangulation.OpenCascade.OpenSceneGraph 一. 概述 三角剖分是平面剖分中的一个重要课题,在数字图像处理.计算机三维曲面造型.有限元计算.逆向工程等领

详解Android开发之MP4文件转GIF文件

一 基本实现原理 在介绍具体实现过程之前,先简单说下基本原理和实现步骤,在解决相对比较复杂的问题,我习惯先理清主要原理步骤,不要一开始就被繁琐细节绊住,待具体实现时再逐个攻破.下面是主要步骤: 1.视频文件的读取:包括录制和本地文件读取 2.将需要转换的视频部分解析为 Bitmap 序列 3.将解析好的 Bitmap 序列编码生成 GIF 文件 二 视频文件的读取 视频文件的读取比较简单,没什么特别需要说的地方,这里简单贴出视频读取的核心部分代码,详细实现可以Google一下就行了. priva

《趣题学算法》—第1章1.4节图的性质

1.4 图的性质 有的计数问题所涉及的事物间存在着某种关系,这样的问题往往可以表示成一个图(Graph):问题中的每个事物视为一个顶点,两个顶点之间如果存在这关系,就在这两个顶点之间做一条称为边的弧.形式化描述为由问题中的各事物构成的集合,记为顶点集V={v1,v2,-,vn},边集E={(vi, vj)| vi, vj ∈V且vi和vj具有关系}. 例如,图1-3将五个人Adward.John.Philips.Robin和Smith之间的朋友关系表示成了一个图.其中,Adward与Robin和

图的生成树(森林)(克鲁斯卡尔Kruskal算法和普里姆Prim算法)、以及并查集的使用

图的连通性问题:无向图的连通分量和生成树,所有顶点均由边连接在一起,但不存在回路的图. 设图 G=(V, E) 是个连通图,当从图任一顶点出发遍历图G 时,将边集 E(G) 分成两个集合 T(G) 和 B(G).其中 T(G)是遍历图时所经过的边的集合,B(G) 是遍历图时未经过的边的集合.显然,G1(V, T) 是图 G 的极小连通子图,即子图G1 是连通图 G 的生成树. 深度优先生成森林   右边的是深度优先生成森林: 连通图的生成树不一定是唯一的,不同的遍历图的方法得到不同的生成树;从不

Ajax: 构建动态的 Java 应用程序(图)

ajax|程序|动态 在 Web 应用程序开发中,页面重载循环是最大的一个使用障碍,对于 Java? 开发人员来说也是一个严峻的挑战.在这个系列中,作者 Philip McCarthy 介绍了一种创建动态应用程序体验的开创性方式. Ajax(异步 JavaScript 和 XML)是一种编程技术,它允许为基于 Java 的 Web 应用程序把 Java 技术.XML 和 JavaScript 组合起来,从而打破页面重载的范式. Ajax(即异步 JavaScript 和 XML)是一种 Web