<题目链接>

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

解题分析:
一道比较暴力的构造题,首先,我们贪心的想,要使图的直径最长,肯定是尽可能的将所有的顶点连在同一条链上,并且,所有度数为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. python 知识梳理

    1.数据类型:字符串,列表,元组,字典,集合.处理每种数据类型的函数 2.判断与循环部分 3.高级函数:lambda,map,reduce,filter 4.自定义模块以及第三方模块 5.函数式编程 ...

  2. Confluence 6 启用 OpenSearch

    在 OpenSearch autodiscovery  自动发现,你可以添加 Confluence 搜索到你的的 Firefox 或者 IE7 查找对话框中(请参考 Searching Conflue ...

  3. 【DOS】文件统计命令

    1. 统计当前文件夹下文件的个数 ls -l|grep "^-"|wc -l 2. 统计当前文件夹下目录的个数 ls -l|grep "^d"|wc -l 3. ...

  4. python之线程同步

    lock与rlock 使用lock不能连续两次获取锁,获取锁必须先释放锁.但是在一个线程中调用另一个函数时,在该函数中要继续操作共享的数据,这时获取锁就相当于连续执行两次获取锁,所以lock就不适用该 ...

  5. linux学习笔记:第二单元 UNIX和Linux操作系统概述

    第二单元 UNIX和Linux操作系统概述 UNIX是什么 UNIX操作系统的特点 UNIX 与Linux的关系 GNU项目与自由软件 GUN计划 自由软件意味着什么 Linux简介 Linux是什么 ...

  6. 图书管理系统(无中间件,用装饰器的)-----未基于FORM组件

    目的:实现图书的增删改查 models.py from django.db import models # Create your models here. class Book(models.Mod ...

  7. Allegro PCB Design GXL (legacy) 将指定的层导出为DXF

    Allegro PCB Design GXL (legacy) version 16.6-2015 1.菜单:Display > Color/Visibility... 2.打开Color Di ...

  8. EF Core MYSQL 生成表映射配置问题

    Model表 public class Goods { public string ID { get; set; } public string CreatedBy { get; set; } pub ...

  9. Spark核心RDD、什么是RDD、RDD的属性、创建RDD、RDD的依赖以及缓存、

    1:什么是Spark的RDD??? RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行 ...

  10. 一脸懵逼学习KafKa集群的安装搭建--(一种高吞吐量的分布式发布订阅消息系统)

    kafka的前言知识: :Kafka是什么? 在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算.kafka是一个生产-消费模型. Producer:生产者,只负责数 ...