UVA 10720 Graph Construction 贪心+优先队列
题目链接:
题目
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 贪心+优先队列的更多相关文章
- UVa 10720 - Graph Construction(Havel-Hakimi定理)
题目链接: 传送门 Graph Construction Time Limit: 3000MS Memory Limit: 65536K Description Graph is a coll ...
- UVa 10720 - Graph Construction
题目大意:给n个整数, 分别代表图中n个顶点的度,判断是否能构成一张图. 看到这个题后,除了所有数之和应该为偶数之外,没有别的想法了,只好在网上搜解题报告了.然后了解了Havel-Hakimi定理.之 ...
- UVA 11134 - Fabled Rooks(贪心+优先队列)
We would like to place n rooks, 1 ≤ n ≤ 5000, on a n×n board subject to the following restrict ...
- hihoCoder 1309:任务分配 贪心 优先队列
#1309 : 任务分配 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定 N 项任务的起至时间( S1, E1 ), ( S2, E2 ), ..., ( SN, ...
- 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 ...
- HDU 6438 网络赛 Buy and Resell(贪心 + 优先队列)题解
思路:维护一个递增队列,如果当天的w比队首大,那么我们给收益增加 w - q.top(),这里的意思可以理解为w对总收益的贡献而不是真正获利的具体数额,这样我们就能求出最大收益.注意一下,如果w对收益 ...
- uva 1615 高速公路(贪心,区间问题)
uva 1615 高速公路(贪心,区间问题) 给定平面上n个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的每个点,都有一个选出的点离它的欧几里得距离不超过D.(n<=1e5) 对于每个 ...
- 贪心+优先队列 HDOJ 5360 Hiking
题目传送门 /* 题意:求邀请顺序使得去爬山的人最多,每个人有去的条件 贪心+优先队列:首先按照l和r从小到大排序,每一次将当前人数相同的被邀请者入队,那么只要能当前人数比最多人数条件小,该人能 被邀 ...
- [POJ1456]Supermarket(贪心 + 优先队列 || 并查集)
传送门 1.贪心 + 优先队列 按照时间排序从前往后 很简单不多说 ——代码 #include <queue> #include <cstdio> #include <i ...
随机推荐
- Shanghai InfoSys .NET engineer telephone interview
Collect the answers,interested friends from research. 1,Interface and Abstract difference? 2,Generic ...
- Photoshop CS6的安装
Photoshop CS6的安装 文件的现在可以从百度软件中下载 安装方法见参考链接,window版的与之类似,亲测成功 参考链接 Mac版Adobe Photoshop CS6 破解过程 Adobe ...
- DEEPIN下搭建FTP服务器步骤(备忘录)
1.打开终端,执行命令[apt-get install vsftpd],安装VSFTPD 2.安装完成后,修改以下配置信息(否则文件无法传输) [echo 'listen=YES'>>/e ...
- IOS 后台执行
在IOS后台执行是本文要介绍的内容,大多数应用程序进入后台状态不久后转入暂停状态.在这种状态下,应用程序不执行任何代码,并有可能在任意时候从内存中删除.应用程序提供特定的服务,用户可以请求后台执行时间 ...
- Mapper映射器
在两个独立的对象之间建立通信的对象 需要在两个必须相互隔离的子系统间建立通信. 可能是因为无法修改已有的子系统,或者不愿意在两者之间建立依赖关系.甚至不愿意这两个子系统与另一个部件间建立依赖关系. 运 ...
- 初识sass
大图:http://images2015.cnblogs.com/blog/730765/201605/730765-20160529113743209-72994369.png
- C++四种不同的对象生存方式
在C++中,有四种方法产生一个对象. 第一种方法是在堆栈(stack)之中产生: void MyFunc() { CFoo foo;//在堆栈(stack)中产生foo对象 } 第二种方法是在堆(he ...
- 常见web服务器错误
参考地址:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5 10 Status Code Definitions ...
- NFS网络操作系统介绍以及相关应用
1. NFS服务简介 NFS是Network File System 的缩写,中文名称为网络文件系统,由Sun公司开发,功能是通过网络让不同的机器.不同的操作能够彼此分享数据,让应用程序在客户端通过网 ...
- Windows 8.1 序列化与反序列化
/// <summary> /// 对象序列化成 XML String /// </summary> public static void XmlSerialize<T& ...