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$直接有边相连的点$ ...
随机推荐
- 跨域iframe如何实现高度自适应?
经常有项目会要求实现iframe高度自适应,如果是同域的还好说,如果是跨域的,父页面没有办法操作子页面,想要正确获取子页面高度的话,可以采用以下办法: 方法一:使用HTML5 postMessage ...
- 博弈论进阶之Every-SG
Every-SG 给定一张无向图,上面有一些棋子,两个顶尖聪明的人在做游戏,每人每次必须将可以移动的棋子进行移动,不能移动的人输 博弈分析 题目中的要求实际是"不论前面输与否,只要最后一个棋 ...
- 使用OCLint和Sonar对iOS代码分析和质量管理
OCLint 是一个强大的静态代码分析工具,可以用来提高代码质量,查找潜在的bug,主要针对c,c++和Objective-c的静态分析. Sonar 是一个用于代码质量管理的开放平台.通过插件机制, ...
- 关于flutter插件地图的使用flutter_map
关于flutter插件地图的使用flutter_map flutter_map A Dart implementation of Leaflet for Flutter apps.一个基于leafle ...
- Python 序列化模块(json,pickle,shelve)
json模块 JSON (JavaScript Object Notation):是一个轻量级的数据交换格式模块,受javascript对象文本语法启发,但不属于JavaScript的子集. 常用方法 ...
- Microsoft Excel行列限制简明列表
Excel行列限制简明列表:数据出处+-----------------+-----------+--------------+---------------------+ | | Max. Rows ...
- jenkins使用开始踩坑(1)
上篇文章 安装教程 :https://www.cnblogs.com/linuxchao/p/linuxchao-jenkins-setup.html 一.前戏 话说上一篇文章安装完 JDK 和 je ...
- Linux经常用到的命令以及快捷键
Linux常用命令和快捷键 最近一直在对CentOS系统进行各种体验,为方便自己也方便他人,整理了Linux常用命令及快捷键,不过其实大多和DOS是一样的,只是命令的表达上可能有点儿不一样. Linu ...
- LinuxMint上安装redis和python遇到的一些问题
今天在安装Redis和Python上遇到了些问题,解决后记录下来. 环境:LinuxMint 18.3 安装redis sudo wget http://download.redis.io/relea ...
- day 16 包的导入
包的认识 '''包通过文件夹来管理一系列功能相近的模块包:一系列模块的集合体重点:包中一定有一个专门用来管理包中所有模块的文件包名:存放一系列模块的文件夹名字包名(包对象)存放的是管理模块的那个文件 ...