<题目链接>

题目大意:
给你一些点的最大度数,让你构造一张图,使得该图的直径最长,输出对应直径以及所有的边。

解题分析:
一道比较暴力的构造题,首先,我们贪心的想,要使图的直径最长,肯定是尽可能的将所有的顶点连在同一条链上,并且,所有度数为1的点都只能作为最外围的点。所以,基本思想就是先将两个度为1的顶点放在链的两端(如果有的话),然后所有度>=2的点放在链的中间,建好链之后,再将多余的度为1的点挂在链上最大度数未满的点上。

#include <bits/stdc++.h>
using namespace std; const int N = ;
int n,ind[N];
struct Node{
int ind,loc;
bool operator < (const Node &tmp){
return ind>tmp.ind;
}
};
vector<Node>vec1,vec; int main(){
scanf("%d",&n); for(int i=;i<=n;i++){
int numd;scanf("%d",&numd);
if(numd==)vec1.push_back(Node{numd,i});
if(numd>)vec.push_back(Node{numd,i});
}
if(vec1.size()<=){
if(vec1.size()==){
printf("YES %d\n",vec.size()-);
printf("%d\n",vec.size()-);
int u=vec[].loc;
for(int i=;i<vec.size();i++){
int v=vec[i].loc;printf("%d %d\n",u,v);
u=v;
}
}else {
if(vec1.size()==){
printf("YES %d\n",vec.size());
printf("%d\n",vec.size());
int u=vec1[].loc;
for(int i=;i<vec.size();i++){
int v=vec[i].loc;printf("%d %d\n",u,v);
u=v;
}
}else if(vec1.size()==){
printf("YES %d\n",vec.size()+);
printf("%d\n",vec.size()+);
int u=vec1[].loc;
for(int i=;i<vec.size();i++){
int v=vec[i].loc;printf("%d %d\n",u,v);
u=v;
}
printf("%d %d\n",vec[vec.size()-].loc,vec1[].loc);
}
}
}else { //如果度为1的点多于2个
int sum=;
for(int i=;i<vec.size();i++){
vec[i].ind-=;
sum+=vec[i].ind;
}
if(sum<vec1.size()-)return puts("NO"),;
printf("YES %d\n",vec.size()+);
printf("%d\n",vec.size()++vec1.size()-);
int u=vec1[].loc;
for(int i=;i<vec.size();i++){
int v=vec[i].loc;printf("%d %d\n",u,v);
u=v;
}
printf("%d %d\n",vec[vec.size()-].loc,vec1[].loc);
sort(vec.begin(),vec.end());
int pos=;
for(int i=;i<vec1.size();i++){
vec[pos].ind--;
printf("%d %d\n",vec1[i].loc,vec[pos].loc);
if(vec[pos].ind==)pos++;
}
}
}

Codeforces 1082D Maximum Diameter Graph (贪心构造)的更多相关文章

  1. D. Maximum Diameter Graph 贪心+图论+模拟

    题意:给出n个点的度数列 上限(实际点可以小于该度数列)问可以构造简单路最大长度是多少(n个点要连通 不能有平行边.重边) 思路:直接构造一条长链  先把度数为1的点 和度数大于1的点分开  先把度数 ...

  2. cf1082D Maximum Diameter Graph(构造+模拟+细节)

    QWQ不得不说 \(cf\)的\(edu\ round\)出这种东西 有点太恶心了 题目大意:给你\(n\)个点,告诉你每个点的最大度数值(也就是说你的度数要小于等于这个),让你构造一个无向图,使其满 ...

  3. Educational Codeforces Round 55 (Rated for Div. 2):D. Maximum Diameter Graph

    D. Maximum Diameter Graph 题目链接:https://codeforces.com/contest/1082/problem/D 题意: 给出n个点的最大入度数,要求添加边构成 ...

  4. 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 ...

  5. CF1082D:Maximum Diameter Graph (简单构造)

    Graph constructive problems are back! This time the graph you are asked to build should match the fo ...

  6. CodeForces 1082 D Maximum Diameter Graph

    题目传送门 题意:现在有n个点,每个点的度数最大为di,现在要求你构成一棵树,求直径最长. 题解:把所有度数为2的点先扣出来,这些就是这颗树的主干,也就是最长的距离. 然后我们把度数为2的点连起来,之 ...

  7. [CF1082D]Maximum Diameter Graph

    题目描述 Description Graph constructive problems are back! This time the graph you are asked to build sh ...

  8. CodeForces - 459E Pashmak and Graph[贪心优化dp]

    E. Pashmak and Graph time limit per test 1 second memory limit per test 256 megabytes input standard ...

  9. Educational Codeforces Round 20 C 数学/贪心/构造

    C. Maximal GCD time limit per test 1 second memory limit per test 256 megabytes input standard input ...

随机推荐

  1. HttpListener通讯成功案例

    1.创建WindowsService,如下代码 using System;using System.Net;using System.Net.Sockets;using System.ServiceP ...

  2. HTML中特殊符号的处理

    一.写在前面 今天在写页面时记不清大/小于符号该怎么写,于是就想着整理一下方便后面用到! 二.HTML中常用特殊符号的处理    <    <   小于号或显示标记        > ...

  3. 修改 sql 提示符信息:

    Last login: Thu Dec 8 19:18:08 2016 from 192.168.242.1 [root@localhost ~]# su - oracle [oracle@local ...

  4. LeetCode(98): 验证二叉搜索树

    Medium! 题目描述: 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右 ...

  5. bzoj 2301

    一道莫比乌斯反演入门题. 首先观察题目要求:的数对数 首先可以发现,这个东西同时有上界和下界,所以并不是很容易计算 那么我们变下形,可以看到:原式= 是不是清晰很多了?(当然没有!) 不,这一步很重要 ...

  6. Git使用一:git客户端安装与创建用户

    1.下载并安装Git和图形客户端TortoiseGit Git官网:https://gitforwindows.org/ TortoiseGit官网: https://tortoisegit.org/ ...

  7. Linux文本分析命令awk的妙用

    基本用法 awk是一个强大的文本分析工具,简单来说awk就是把文件逐行读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理 awk命令格式如下 awk [-F field-sep ...

  8. jmeter 中如何一次运行多条sql语句

    在jmeter测试mysql中如何一次运行多条sql语句 allowMultiQueries=true 注意:太低版本的mysql和jdbc不支持,最好用最新版的

  9. windows下KafkaOffsetMonitor下载及安装

    KafkaOffsetMonitor是一个可视化工具的jar包,如KafkaOffsetMonitor-assembly-0.2.1.jar,用来来监控kafka的使用状态. 一.下载地址 https ...

  10. bootstrap的模拟单选按钮

    <div class="btn-group" data-toggle="buttons" id="radio"> <lab ...