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$直接有边相连的点$ ...
随机推荐
- 【代码笔记】Web-CSS-CSS background背景
一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- 互联网安全中心(CIS)发布新版20大安全控制
这些最佳实践最初由SANS研究所提出,名为“SANS关键控制”,是各类公司企业不可或缺的安全控制措施.通过采纳这些控制方法,公司企业可防止绝大部分的网络攻击. 有效网络防御的20条关键安全控制 对上一 ...
- 南京邮电大学 JavaA期末复习要点总结
南京邮电大学 JavaA复习要点: Chap1 入门 1. Java应用程序开发过程教材P14~P15 Chap 2 基本语法 1. 标识符的命名规则教材P19 字母下划线美元符号开头,除 ...
- 两种常用的全排列算法(java)
问题:给出一个字符串,输出所有可能的排列. 全排列有多种算法,此处仅介绍常用的两种:字典序法和递归法. 1.字典序法: 如何计算字符串的下一个排列了?来考虑"926520"这个字符 ...
- DVWA 黑客攻防演练(六)不安全的验证码 Insecure CAPTCHA
之前在 CSRF 攻击 的那篇文章的最后,我觉得可以用验证码提高攻击的难度. 若有验证码的话,就比较难被攻击者利用 XSS 漏洞进行的 CSRF 攻击了,因为要识别验证码起码要调用api,跨域会被浏览 ...
- maven常用仓库
==================2014-04-19添加========可访问=============================== http://nexus.openkoala.org/ ...
- Github如何提交修改的代码以及更新到最新版本
最近有人问我,Github上如何把修改fork到的代码提交到原版本上去,以及如何更新到最新的版本.只针对初学者,大神的话勿喷. 首先说第一个问题. 进入到你修改的某个repository里面(以本人的 ...
- Linux-基础学习(三)-Nginx学习
1.nginx安装与部署 1.1 nginx入门 Web 网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的 请求后才会响应,最终用于提供服务程序的 Web 服务器会通过 HTTP( ...
- 利用SQL注入漏洞登录后台
所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询 ...
- sub2ind函数
sub2ind函数是MATLAB中对矩阵索引号检索的函数,用法如下: >> A=rand(5) A = 0.6850 0.0867 0.2290 0.1006 0. ...