题目链接:

题目

Graph Construction

Time limit: 3.000 seconds

问题描述

Graph is a collection of edges E and vertices V. Graph has a wide variety of applications in computer.

There are different ways to represent graph in computer. It can be represented by adjacency matrix or

by adjacency list. There are some other ways to represent graph. One of them is to write the degrees

(the numbers of edges that a vertex has) of each vertex. If there are n vertices then n integers can

represent that graph. In this problem we are talking about simple graph which does not have same

endpoints for more than one edge, and also does not have edges with the same endpoint.

Any graph can be represented by n number of integers. But the reverse is not always true. If you

are given n integers, you have to find out whether this n numbers can represent the degrees of n vertices

of a graph.

输入

Each line will start with the number n (≤ 10000). The next n integers will represent the degrees of n

vertices of the graph. A ‘0’ input for n will indicate end of input which should not be processed.

输出

If the n integers can represent a graph then print ‘Possible’. Otherwise print ‘Not possible’. Output

for each test case should be on separate line.

样例

input

4 3 3 3 3

6 2 4 5 5 2 1

5 3 2 3 2 1

0

output

Possible

Not possible

Not possible

题意

给你每个顶点的度数,问能不能组成无环无平行边的无向图。

题解

贪心做:

从最大度数的那个点(假设度数是x)做开始,在剩下的数中选出度最大的前x个数,如果有哪个节点的度数为0则不可能构成图,否则把这些节点度数减1继续做。 直到所有的点的度数都为0。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std; int main(){
int n;
while(scanf("%d",&n)==1&&n){
priority_queue<int> pq;
int x;
for(int i=0;i<n;i++){
scanf("%d",&x);
pq.push(x);
}
bool su=1;
while(!pq.empty()){
int u=pq.top(); pq.pop();
if(u==0) break;
vector<int> pool;
for(int i=0;i<u;i++){
if(pq.empty()){
su=0; break;
}
int v=pq.top(); pq.pop();
if(v==0){
su=0; break;
}
v--;
pool.push_back(v);
}
if(!su) break;
for(int i=0;i<pool.size();i++){
pq.push(pool[i]);
}
}
if(su) puts("Possible");
else puts("Not possible");
}
return 0;
}

UVA 10720 Graph Construction 贪心+优先队列的更多相关文章

  1. UVa 10720 - Graph Construction(Havel-Hakimi定理)

    题目链接: 传送门 Graph Construction Time Limit: 3000MS     Memory Limit: 65536K Description Graph is a coll ...

  2. UVa 10720 - Graph Construction

    题目大意:给n个整数, 分别代表图中n个顶点的度,判断是否能构成一张图. 看到这个题后,除了所有数之和应该为偶数之外,没有别的想法了,只好在网上搜解题报告了.然后了解了Havel-Hakimi定理.之 ...

  3. UVA 11134 - Fabled Rooks(贪心+优先队列)

    We would like to place  n  rooks, 1 ≤  n  ≤ 5000, on a  n×n  board subject to the following restrict ...

  4. hihoCoder 1309:任务分配 贪心 优先队列

    #1309 : 任务分配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定 N 项任务的起至时间( S1, E1 ), ( S2, E2 ), ..., ( SN,  ...

  5. C. Playlist Educational Codeforces Round 62 (Rated for Div. 2) 贪心+优先队列

    C. Playlist time limit per test 2 seconds memory limit per test 256 megabytes input standard input o ...

  6. HDU 6438 网络赛 Buy and Resell(贪心 + 优先队列)题解

    思路:维护一个递增队列,如果当天的w比队首大,那么我们给收益增加 w - q.top(),这里的意思可以理解为w对总收益的贡献而不是真正获利的具体数额,这样我们就能求出最大收益.注意一下,如果w对收益 ...

  7. uva 1615 高速公路(贪心,区间问题)

    uva 1615 高速公路(贪心,区间问题) 给定平面上n个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的每个点,都有一个选出的点离它的欧几里得距离不超过D.(n<=1e5) 对于每个 ...

  8. 贪心+优先队列 HDOJ 5360 Hiking

    题目传送门 /* 题意:求邀请顺序使得去爬山的人最多,每个人有去的条件 贪心+优先队列:首先按照l和r从小到大排序,每一次将当前人数相同的被邀请者入队,那么只要能当前人数比最多人数条件小,该人能 被邀 ...

  9. [POJ1456]Supermarket(贪心 + 优先队列 || 并查集)

    传送门 1.贪心 + 优先队列 按照时间排序从前往后 很简单不多说 ——代码 #include <queue> #include <cstdio> #include <i ...

随机推荐

  1. js 数组的length(javascript教程四)

    这是一个简单的函数,就是利用length来判断数组再遍历数组了. <script language="javascript" type="text/javascri ...

  2. C# 类构造函数赋值里属性与字段赋值注意项

    public class Test { public Test(int age) { this.Age=age;//如果这里使用的是this.age=age;那么属性里的判断将不会执行 } priva ...

  3. Cocos2d-x中的字符串

    在Cocos2d-x中能够使用的字符串constchar*.std::string和cocos2d::__String等,其中const char*是C风格的字符串,std::string是C++风格 ...

  4. OpenGL1-6讲小结

    首先是第一讲,GL窗体的搭建,依葫芦画瓢,很多代码虽然解释了,最后看起来还是比较生涩.一开始按照上一篇的链接去敲的代码,结果最后while死循环了,我也不知道问题出哪儿,后来去找了个源码,还附带了更加 ...

  5. 常用HTML meta 标签属性(网站兼容与优化需要),meta标签

    常用HTML meta 标签属性(网站兼容与优化需要),meta标签 标签提供关于HTML文档的元数据.元数据不会显示在页面上,但是对于机器是可读的.它可用于浏览器(如何显示内容或重新加载页面),搜索 ...

  6. LiteHttp:一款‘智能’的HTTP框架类库

    LiteHttp:一款‘智能’的HTTP框架类库(转自github) 简介 LiteHttp是一款简单.智能.灵活的HTTP框架库,它在请求和响应层面做到了全自动构建和解析,主要用于Android快速 ...

  7. CDH JPS 出现没有名字的进程

    jps 时出现没有名字的进程 或者process information unavailable 把服务关掉,执行一下 rm -rf /tmp/hsperfdata_* 再重启就好了.

  8. 正则PerlRegEx实现的批量替换指定文件中的标签

    示例: 一个朋友需要而编写的标签升级更新. 速度超快,1w个文件大概4,5秒,本想加个多线程显示进度,后来想想算了 主要代码: reg.RegEx := '<' + Edit_regular1. ...

  9. .NET SDK和下载

    http://blogs.msdn.com/b/dotnet/p/dotnet_sdks.aspx .NET SDK和下载 您可以通过下载.NET框架针对包和软件开发工具包,并使用它们与Visual ...

  10. 使用CSS画一个三角形

    <div style="width:0px;height:0px;border-width:40px;border-style:solid;border-color:transpare ...