D. Maximum Diameter Graph 贪心+图论+模拟
题意:给出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 贪心+图论+模拟的更多相关文章
- Codeforces 1082D Maximum Diameter Graph (贪心构造)
<题目链接> 题目大意:给你一些点的最大度数,让你构造一张图,使得该图的直径最长,输出对应直径以及所有的边. 解题分析:一道比较暴力的构造题,首先,我们贪心的想,要使图的直径最长,肯定是尽 ...
- cf1082D Maximum Diameter Graph(构造+模拟+细节)
QWQ不得不说 \(cf\)的\(edu\ round\)出这种东西 有点太恶心了 题目大意:给你\(n\)个点,告诉你每个点的最大度数值(也就是说你的度数要小于等于这个),让你构造一个无向图,使其满 ...
- Educational Codeforces Round 55 (Rated for Div. 2):D. Maximum Diameter Graph
D. Maximum Diameter Graph 题目链接:https://codeforces.com/contest/1082/problem/D 题意: 给出n个点的最大入度数,要求添加边构成 ...
- 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 ...
- CF1082D:Maximum Diameter Graph (简单构造)
Graph constructive problems are back! This time the graph you are asked to build should match the fo ...
- [CF1082D]Maximum Diameter Graph
题目描述 Description Graph constructive problems are back! This time the graph you are asked to build sh ...
- 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 ...
- [CSP-S模拟测试]:Graph(图论+贪心)
题目描述 给定一张$n$个点$m$条边的无向图,每条边连接两个顶点,保证无重边自环,不保证连通你想在这张图上进行若干次旅游,每次旅游可以任选一个点$x$作为起点,再走到一个与 $x$直接有边相连的点$ ...
随机推荐
- OpenCL中的half与float的转换
在kernel中使用half类型可以在牺牲一定精度的代价下来提升运算速度. 在kernel中, 可以比较方便的对half数据进行计算, 但在host上的, 对half的使用就没那么方便了. 查看cl_ ...
- Linux 中磁盘阵列RAID10配置
首先,了解一下RAID是什么?(百度所得) 独立磁盘冗余阵列(RAID,redundant array of independent disks)是把相同的数据存储在多个硬盘的不同的地方(因此,冗余地 ...
- Linux创建和挂载XFS文件系统测试实践
XFS文件系统简介 维基百科关于XFS的简介如下: XFS is a high-performance 64-bit 年,由Silicon Graphics为他们的IRIX操作系统而开发,是IRIX ...
- 前后端分离djangorestframework—— 接入微信模板消息推送
微信 什么是微信也不多说,跟前面的支付宝一样的 微信支付 微信支付也有个沙箱环境,沙箱环境官方文档 由文档中那句很显眼的话所得,即使是测试环境也需要真实的商户号,所以这个就没法想支付宝那样用沙箱账号来 ...
- JS第二部分--DOM文档对象模型
一.DOM的概念 二.DOM可以做什么 三.DOM对象的获取 四.事件的介绍 五.DOM节点标签样式属性的操作 六.DOM节点对象对值的操作 七.DOM节点-标签属性的操作(例如id class sr ...
- virtualenvwrapper 虚拟环境的使用 和 python 安装源的更改
virtualenvwrapper 虚拟环境的使用 鉴于virtualenv不便于对虚拟环境集中管理,所以推荐直接使用virtualenvwrapper. virtualenvwrapper提供了一系 ...
- eclipse search java 可以搜到 source.jar里的
eclipse search java 可以搜到 source.jar里的
- Putty中的pscp和psftp的简明用法
用习惯了putty,那是真心的方便啊,putty文件夹下其他的小兄弟也不能忽略啊. 以前的时候,从远程服务器下载个文件用winscp,后来,发现在putty文件夹里好像有一个 pscp和psftp,今 ...
- 文本分类实战(七)—— Adversarial LSTM模型
1 大纲概述 文本分类这个系列将会有十篇左右,包括基于word2vec预训练的文本分类,与及基于最新的预训练模型(ELMo,BERT等)的文本分类.总共有以下系列: word2vec预训练词向量 te ...
- Luogu5058 [ZJOI2004]嗅探器
$Luogu5058 [ZJOI2004]嗅探器 给定一张 \(n\) 个点, \(m\) 条边的无向图,和两点 \(s,\ t\) ,求 \(s\to t\) 编号最小的必经点(排除 \(s,\ t ...