BZOJ 2151 种树(循环链表)
2024-08-24 10:22:27
【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=2151
【题目大意】
在一个长度为n的数字环中挑选m个不相邻的数字使得其和最大
【题解】
我们用大根堆和循环链表维护数字的相邻关系和删去操作,
对于相邻点不能选取这个条件,我们在每次删去一个点之后,加入一个新的点
权值和为周围点减去删去的点,增加反向弧,这样子就可以通过之后的选取实现退流操作
保证答案最优。
【代码】
#include <cstdio>
#include <queue>
using namespace std;
const int N=200010;
namespace Circular_List{
bool del[N];
int n,nxt[N],pre[N],val[N];
typedef pair<int,int> P;
priority_queue<P,vector<P> > Q; // 大根堆
void Initialize(){
while(Q.size())Q.pop();
for(int i=1;i<=n;i++)pre[i]=i-1; pre[1]=n;
for(int i=1;i<=n;i++)nxt[i]=i+1; nxt[n]=1;
for(int i=1;i<=n;i++)Q.push(make_pair(val[i],i)),del[i]=0;
}
void Del(int x){
del[x]=1;
nxt[pre[x]]=nxt[x];
pre[nxt[x]]=pre[x];
nxt[x]=pre[x]=0;
}
int Get(){
while(del[Q.top().second])Q.pop();
int res=Q.top().second; Q.pop();
return res;
}
}
int m;
int main(){
using namespace Circular_List;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)scanf("%d",&val[i]);
if(m>n/2){puts("Error!");return 0;}
Initialize();
int ans=0;
for(int i=1;i<=m;i++){
int x=Get();
ans+=val[x];
val[x]=val[pre[x]]+val[nxt[x]]-val[x];
Del(pre[x]); Del(nxt[x]);
Q.push(make_pair(val[x],x));
}printf("%d\n",ans);
return 0;
}
最新文章
- Liferay 6.2 改造系列之二十一:修改WebSphare下JSONWS服务不生效的BUG
- win安装mysql5.1
- Html - Bootstrap 头部
- c语言描述简单的线性表,获取元素,删除元素,
- Java Timer, TimerTask
- DLL中导出STL模板类的问题
- Sogou搜狗搜索引擎登录网站 - Blog透视镜
- FreeBsdb FAMP Lamp环境
- 动态修改ActionBar Menu的显示
- AngularJS应用开发思维之2:数据绑定
- The C++ Programming Language 学习笔记 第6章 表达式和语句
- Mac下Git安装及配置
- ubuntu默认启动方式修改 psensor命令
- C++ 单例模式(懒汉、饿汉模式)
- Requested a new session but one was in progress
- BZOJ3165: [Heoi2013]Segment(李超线段树)
- 关于ueditor一些使用记录
- Hibernate查询视图返回null问题说明及解决办法
- 设置linux中tcp默认的20秒connect超时时间(转)
- hdu3999-The order of a Tree (二叉树的先序遍历)
热门文章
- JavaScript验证注册信息
- 诺贝斯特(厦门)电气有限公司http://www.thebest.cn.com/
- 在c++中实现反射的初步想法
- 对于Linux平台下C语言开发中__sync_函数的认识(转)
- Python Challenge 第 2 关攻略:ocr
- HttpClient使用
- java基础18 String字符串和Object类(以及“equals” 和 “==”的解析)
- python随笔(三)
- jQuery对象与JS原生对象之间的转换
- ROS + Caffe 机器人操作系统框架和深度学习框架笔记 (機器人控制與人工智能)