题意:给出n个点的度数列 上限(实际点可以小于该度数列)问可以构造简单路最大长度是多少(n个点要连通 不能有平行边、重边)

思路:直接构造一条长链  先把度数为1的点 和度数大于1的点分开  先把度数大于1的点连在一起 然后把度数为1的点连在两边可以涨最多2的长度(如果有大于等于2的度数为1的点)

随后就涨不了长度了,还要把度数为1的点接在链上 判断是否可以构成这样一颗树

(在while里面少写了度数-- WA了两次7 QAQ)

 #include<bits/stdc++.h>
#define pb push_back
#define pii pair<int,int>
#define mkp make_pair
#define S second
#define F first
using namespace std;
const int maxn=2e5+;
const int inf =0x3f3f3f3f;
vector<pii>v;
vector<int>v1;
int vis[maxn];
pii ans[maxn];
int main(){
int n;
scanf("%d",&n);
int tmp;
for(int i=;i<=n;i++){
scanf("%d",&tmp);
if(tmp==)v1.pb(i);
else {
v.pb(mkp(tmp,i));
}
}
if(n==){
cout<<"YES "<<<<endl;
cout<<<<endl;
cout<<<<" "<<<<endl;
return ;
}
//cout<<v.size()<<endl;
int cnt=;
int len=;
sort(v.begin(),v.end());
for(int i=;i<int(v.size())-;i++){
ans[cnt++]=mkp(v[i].S,v[i+].S);
v[i].F--;
v[i+].F--;
len++;
}
if(v1.size()>=){
int p=;
len+=;
if(v.size()&&v[].F){
v[].F--;
ans[cnt++]=mkp(v[].S,v1[]);
} if(v.size()&&v[int(v.size())->=?v.size()-:].F){
v[int(v.size())->=?v.size()-:].F--;
ans[cnt++]=mkp(v[int(v.size())->=?v.size()-:].S,v1[]);
}
// ans[cnt++]=mkp(v[0].S,v1[0]); for(int i=;i<int(v.size());i++){
while(p<v1.size()&&v[i].F>){
ans[cnt++]=mkp(v[i].S,v1[p]);
p++;
v[i].F--;
}
if(p==v1.size())break;
}
}
else { if(v1.size()==){
len+=;
ans[cnt++]=mkp(v1[],v[].S);
}
}
//cout<<cnt<<endl;
if(cnt!=n-){
cout<<"NO\n";
return ;
}
cout<<"YES ";cout<<len<<endl;
cout<<cnt<<endl;
for(int i=;i<cnt;i++){
cout<<ans[i].F<<" "<<ans[i].S<<endl;
}
return ;
}

D. Maximum Diameter Graph 贪心+图论+模拟的更多相关文章

  1. Codeforces 1082D Maximum Diameter Graph (贪心构造)

    <题目链接> 题目大意:给你一些点的最大度数,让你构造一张图,使得该图的直径最长,输出对应直径以及所有的边. 解题分析:一道比较暴力的构造题,首先,我们贪心的想,要使图的直径最长,肯定是尽 ...

  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. [CF1082D]Maximum Diameter Graph

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

  7. CodeForces 1082 D Maximum Diameter Graph

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

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

  9. [CSP-S模拟测试]:Graph(图论+贪心)

    题目描述 给定一张$n$个点$m$条边的无向图,每条边连接两个顶点,保证无重边自环,不保证连通你想在这张图上进行若干次旅游,每次旅游可以任选一个点$x$作为起点,再走到一个与 $x$直接有边相连的点$ ...

随机推荐

  1. OpenCL中的half与float的转换

    在kernel中使用half类型可以在牺牲一定精度的代价下来提升运算速度. 在kernel中, 可以比较方便的对half数据进行计算, 但在host上的, 对half的使用就没那么方便了. 查看cl_ ...

  2. Linux 中磁盘阵列RAID10配置

    首先,了解一下RAID是什么?(百度所得) 独立磁盘冗余阵列(RAID,redundant array of independent disks)是把相同的数据存储在多个硬盘的不同的地方(因此,冗余地 ...

  3. Linux创建和挂载XFS文件系统测试实践

    XFS文件系统简介 维基百科关于XFS的简介如下: XFS is a high-performance 64-bit 年,由Silicon Graphics为他们的IRIX操作系统而开发,是IRIX ...

  4. 前后端分离djangorestframework—— 接入微信模板消息推送

    微信 什么是微信也不多说,跟前面的支付宝一样的 微信支付 微信支付也有个沙箱环境,沙箱环境官方文档 由文档中那句很显眼的话所得,即使是测试环境也需要真实的商户号,所以这个就没法想支付宝那样用沙箱账号来 ...

  5. JS第二部分--DOM文档对象模型

    一.DOM的概念 二.DOM可以做什么 三.DOM对象的获取 四.事件的介绍 五.DOM节点标签样式属性的操作 六.DOM节点对象对值的操作 七.DOM节点-标签属性的操作(例如id class sr ...

  6. virtualenvwrapper 虚拟环境的使用 和 python 安装源的更改

    virtualenvwrapper 虚拟环境的使用 鉴于virtualenv不便于对虚拟环境集中管理,所以推荐直接使用virtualenvwrapper. virtualenvwrapper提供了一系 ...

  7. eclipse search java 可以搜到 source.jar里的

    eclipse search java 可以搜到 source.jar里的

  8. Putty中的pscp和psftp的简明用法

    用习惯了putty,那是真心的方便啊,putty文件夹下其他的小兄弟也不能忽略啊. 以前的时候,从远程服务器下载个文件用winscp,后来,发现在putty文件夹里好像有一个 pscp和psftp,今 ...

  9. 文本分类实战(七)—— Adversarial LSTM模型

    1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 te ...

  10. Luogu5058 [ZJOI2004]嗅探器

    $Luogu5058 [ZJOI2004]嗅探器 给定一张 \(n\) 个点, \(m\) 条边的无向图,和两点 \(s,\ t\) ,求 \(s\to t\) 编号最小的必经点(排除 \(s,\ t ...