CF1082D:Maximum Diameter Graph (简单构造)
Graph constructive problems are back! This time the graph you are asked to build should match the following properties.
The graph is connected if and only if there exists a path between every pair of vertices.
The diameter (aka "longest shortest path") of a connected undirected graph is the maximum number of edges in the shortest path between any pair of its vertices.
The degree of a vertex is the number of edges incident to it.
Given a sequence of n n integers a 1 ,a 2 ,…,a n a1,a2,…,an construct a connected undirected graph of n n vertices such that:
- the graph contains no self-loops and no multiple edges;
- the degree d i di of the i i -th vertex doesn't exceed a i ai (i.e. d i ≤a i di≤ai );
- the diameter of the graph is maximum possible.
Output the resulting graph or report that no solution exists.
Input
The first line contains a single integer n n (3≤n≤500 3≤n≤500 ) — the number of vertices in the graph.
The second line contains n n integers a 1 ,a 2 ,…,a n a1,a2,…,an (1≤a i ≤n−1 1≤ai≤n−1 ) — the upper limits to vertex degrees.
Output
Print "NO" if no graph can be constructed under the given conditions.
Otherwise print "YES" and the diameter of the resulting graph in the first line.
The second line should contain a single integer m m — the number of edges in the resulting graph.
The i i -th of the next m m lines should contain two integers v i ,u i vi,ui (1≤v i ,u i ≤n 1≤vi,ui≤n , v i ≠u i vi≠ui ) — the description of the i i -th edge. The graph should contain no multiple edges — for each pair (x,y) (x,y) you output, you should output no more pairs (x,y) (x,y) or (y,x) (y,x) .
Examples
3
2 2 2
YES 2
2
1 2
2 3
5
1 4 1 1 1
YES 2
4
1 2
3 2
4 2
5 2
3
1 1 1
NO
题意:构造一棵树,使得直径最长,需要满足每个点的度数di<=ai。
思路:我们选择ai最小的两个最为直径端点,然后把di>1的加到直径上去,剩下的度数为1的加到直径的枝桠上。
昨天没时间了没有写输出“NO”,WA3了。今天加上了就AC了。
给我30s可能就A了,加上最后一题水题没做。这一次CF血亏。
#include<bits/stdc++.h>
#define pii pair<int,int>
#define F first
#define S second
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
int N,sum,L,S,T;
int b[maxn],ans; int f[maxn],c[maxn],tot;
pii a[maxn];
int main()
{
scanf("%d",&N); ans=;
rep(i,,N) scanf("%d",&a[i].F),a[i].S=i;
sort(a+,a+N+);
b[++L]=a[].S; b[++L]=a[].S;
int pre=b[],bg=;
rep(i,,N){
if(a[i].F>){
f[++tot]=pre,c[tot]=a[i].S,pre=a[i].S,ans++;
if(!bg) bg=i;
}
}
f[++tot]=pre,c[tot]=b[];
int pos=bg,F=true;
rep(i,,bg-) {
if(a[i].F==) {
while(a[pos].F<=){
pos++; if(pos==N+) {F=false; break;}
}
if(!F) break;
a[pos].F--; f[++tot]=a[i].S,c[tot]=a[pos].S;
}
else break;
}
if(!F||tot!=N-) puts("NO");
else {
printf("YES %d\n%d\n",ans,N-);
rep(i,,tot) printf("%d %d\n",f[i],c[i]);
}
return ; }
CF1082D:Maximum Diameter Graph (简单构造)的更多相关文章
- cf1082D Maximum Diameter Graph(构造+模拟+细节)
QWQ不得不说 \(cf\)的\(edu\ round\)出这种东西 有点太恶心了 题目大意:给你\(n\)个点,告诉你每个点的最大度数值(也就是说你的度数要小于等于这个),让你构造一个无向图,使其满 ...
- [CF1082D]Maximum Diameter Graph
题目描述 Description Graph constructive problems are back! This time the graph you are asked to build sh ...
- Codeforces 1082D Maximum Diameter Graph (贪心构造)
<题目链接> 题目大意:给你一些点的最大度数,让你构造一张图,使得该图的直径最长,输出对应直径以及所有的边. 解题分析:一道比较暴力的构造题,首先,我们贪心的想,要使图的直径最长,肯定是尽 ...
- Educational Codeforces Round 55 (Rated for Div. 2) D. Maximum Diameter Graph (构造图)
D. Maximum Diameter Graph time limit per test2 seconds memory limit per test256 megabytes inputstand ...
- Educational Codeforces Round 55 (Rated for Div. 2):D. Maximum Diameter Graph
D. Maximum Diameter Graph 题目链接:https://codeforces.com/contest/1082/problem/D 题意: 给出n个点的最大入度数,要求添加边构成 ...
- D. Maximum Diameter Graph 贪心+图论+模拟
题意:给出n个点的度数列 上限(实际点可以小于该度数列)问可以构造简单路最大长度是多少(n个点要连通 不能有平行边.重边) 思路:直接构造一条长链 先把度数为1的点 和度数大于1的点分开 先把度数 ...
- CodeForces 1082 D Maximum Diameter Graph
题目传送门 题意:现在有n个点,每个点的度数最大为di,现在要求你构成一棵树,求直径最长. 题解:把所有度数为2的点先扣出来,这些就是这颗树的主干,也就是最长的距离. 然后我们把度数为2的点连起来,之 ...
- Codeforces 1082 D. Maximum Diameter Graph-树的直径-最长链-构造题 (Educational Codeforces Round 55 (Rated for Div. 2))
D. Maximum Diameter Graph time limit per test 2 seconds memory limit per test 256 megabytes input st ...
- CF1157D N Problems During K Days(简单构造)
题目 题目 原数据是水成啥样了,\(<\longrightarrow <=,>=\longrightarrow <=,\)这也能过 被\(hack\)后身败名裂 做法 简单的贪 ...
随机推荐
- python + unittest 做单元测试之学习笔记
单元测试在保证开发效率.可维护性和软件质量等方面有很重要的地位,所谓的单元测试,就是对一个类,一个模块或者一个函数进行正确性检测的一种测试方式. 这里主要是就应用 python + unitest 做 ...
- maven-eclipse 中index.html页面乱码
maven-eclipse 中index.html页面乱码: pox.xml修改: <project> -- <properties> <argLine>-Dfil ...
- 制造抽象基类--《C++必知必会》 条款33
抽象类,含有纯虚函数的类,不可以创建对象. 然而,有时我们并不需要某个函数定义为纯虚函数,但是任然希望此类像抽象类一样,不可以创建对象. 方法1:通过确保类中不存在共有构造函数来模拟抽象基类的性质.意 ...
- 2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017) Solution
A. Drawing Borders Unsolved. B. Buildings Unsolved. C. Joyride Upsolved. 题意: 在游乐园中,有n个游玩设施,有些设施之间有道路 ...
- consul 配置
Eureka 2.0 开源工作宣告停止,对于注册中心来说 Consul 是个更好的选择. 在本场 Chat 中你可以学到的: 了解和搭建 Consul 服务:Spring Cloud Consul 服 ...
- OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)
http://blog.csdn.net/dcrmg/article/details/53677739 1. 基于直方图均衡化的图像增强 直方图均衡化是通过调整图像的灰阶分布,使得在0~255灰阶 ...
- Vue学习笔记之Vue的箭头函数
0x00 箭头函数 基本语法: ES6允许使用“箭头”(=>)定义函数 var f = a = > a //等同于 var f = function(a){ return a; } 如果箭 ...
- 20145318《网络对抗》逆向及Bof基础
实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShe ...
- Spring Boot 之注解@Component @ConfigurationProperties(prefix = "sms")
从spring-boot开始,已经支持yml文件形式的配置,@ConfigurationProperties的大致作用就是通过它可以把properties或者yml配置直接转成对象 例如: 配置文件: ...
- eclipse中下载maven插件解决办法
https://blog.csdn.net/qq_30546099/article/details/71195446 解决Eclipse Maven插件的最佳方案 https://www.cnblog ...