好像是模拟费用流

Code:

#include <bits/stdc++.h>
#define setIO(s) freopen(s".in","r",stdin)
#define P pair<int,int>
#define ll long long
#define maxn 100007
using namespace std;
int arr[maxn],l[maxn],r[maxn],mark[maxn];
priority_queue<P, vector<P>, greater<P> >q;
void del(int x) {
l[r[x]]=l[x], r[l[x]]=r[x];
mark[x]=1;
}
int main() {
// setIO("input");
int n,m,tmp=0,cnt=0;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i) {
int x;
scanf("%d",&x);
if(!x) continue;
if(1ll*arr[tmp]*x>0) arr[tmp]+=x;
else arr[++tmp]=x;
}
n=tmp;
int sum=0;
for(int i=1;i<=n;++i) {
l[i]=i-1,r[i]=i+1;
if(arr[i] > 0) ++cnt, sum+=arr[i];
q.push(make_pair(abs(arr[i]), i));
}
while(cnt > m) {
while(mark[q.top().second]) q.pop();
int x=q.top().second; q.pop();
if((l[x]&&r[x]!=n+1) || arr[x] > 0) {
sum-=abs(arr[x]);
arr[x]+=arr[l[x]] + arr[r[x]];
del(l[x]), del(r[x]);
--cnt;
q.push(make_pair(abs(arr[x]), x));
}
else del(x);
}
printf("%d\n",sum);
return 0;
}

  

最新文章

  1. js正则表达式中test,exec,match方法的区别
  2. GridView获取列子段的几种途径
  3. 【leetcode】Substring with Concatenation of All Words
  4. hdu 1348 Wall (凸包)
  5. 地图坐标转换 -- 火星坐标与GPS坐标
  6. 让IE支持max-width
  7. python学习笔记三--字典的使用
  8. DiscreteSeekBar使用简介,一个带气泡的SeekBar
  9. DEDE站点从网站根目录移到子目录
  10. DotNet命名规范参考(转)
  11. Python学习笔记 — 函数
  12. 安装PyQt5之后mayavi和VTK不能使用
  13. SOUI新组件SIpcObject介绍
  14. openTSDB (rpm)安装 + Grafana 视图
  15. CentOS7.0小随笔——运行级别
  16. 027-Session状态提供程序
  17. JavaScript 变量的作用域名
  18. 【ARM】arm系列知识框架
  19. 单细胞数据高级分析之构建成熟路径 | Identifying a maturation trajectory
  20. js判断用户是客户端还是移动端

热门文章

  1. 如何用katalon录制回放一个web UI测试—— katalon学习笔记(四)
  2. 在linux服务器上自动备份数据库
  3. 使用Sklearn构建朴素贝叶斯分类器-新闻分类
  4. 20191127 Spring Boot官方文档学习(6-8)
  5. python+selenium元素定位之XPath学习01
  6. js 函数回调
  7. Win10使用自带功能创建系统映像备份时D盘被包含进去问题的解决
  8. Centos中使用Docker部署Apollo
  9. P1076寻宝
  10. POJ 3410 Split convex polygon(凸包)