Codeforces - 434D

题目大意:

给定一个长为n的序列,序列中的第i为上的值\(x_i\),序列第i位上的值\(x_i\in[l_i,r_i]\),价值为\(f_i(x_i)\),其中\(f_i(x) = a_ix^2 + b_ix + c_i\),同时给出m个限制条件,每个限制条件用一个三元组\(<u,v,d>\)来表示,需要序列满足\(x_u \leq x_v + d\)。求在满足所限制条件的情况下的\(f_i(x_i)\)的最大和。
其中满足(\(1 \leq n \leq 50, 0 \leq m \leq 100 , -100 \leq l_i \leq r_i \leq 100)\)

题目解答:

这道题跟[bzoj 3144 切糕]类似,由于网上关于切糕的题解已经烂大街了,在这里就不说了.
首先我们考虑在没有\(x_i\)的限制之下的答案计算:
直接取每段内的\(max\)不就好了嘛... ...

开一开脑洞,你就会构造出一个跟切糕差不多的层次模型

这不过这次是"最大割"而已

我们可以把所有有价值的边权全部都被所有值中的最大值减一下

这样我们直接求最小流再调整就行了。

而对于\(X_u <= X_v + d\)的限制

我们直接应用和切糕一样的思想来限制就可以了

一遍最大流即可

\(ans = (max(f_i(x)) + 1)*n - maxflow\)

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
inline void read(int &x){x=0;char ch;bool flag = false;while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true;while(x=10*x+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x;
}
inline int cat_max(const int &a,const int &b){return a>b ? a:b;}
inline int cat_min(const int &a,const int &b){return a<b ? a:b;}
const int maxn = 51;
const int maxm = 128;
const int maxnode = 25400;
const int maxedge = 254000;
const int inf = 0x3f3f3f3f;
struct Edge{int to,next,cap;
}G[maxedge];
int head[maxnode],cnt=1;
void add(int u,int v,int c){G[++cnt].to = v;G[cnt].next = head[u];G[cnt].cap = c;head[u] = cnt;
}
inline void insert(int u,int v,int c){add(u,v,c);add(v,u,0);
}
int dis[maxnode],q[maxnode],l,r;
int S,T;
#define v G[i].to
bool bfs(){memset(dis,-1,sizeof dis);dis[S] = 0;l = 0;r = -1;q[++r] = S;while(l <= r){int u = q[l++];for(int i = head[u];i;i=G[i].next){if(dis[v] == -1 && G[i].cap){dis[v] = dis[u] + 1;q[++r] = v;}}}return dis[T] != -1;
}int cur[maxnode];
int dfs(int u,int f){if(u == T || f == 0) return f;int ret = 0;for(int &i = cur[u];i;i=G[i].next){if(dis[v] == dis[u] + 1 && G[i].cap){int x = dfs(v,cat_min(G[i].cap,f));ret += x;f -= x;G[i].cap -= x;G[i^1].cap += x;if(f == 0) break;}}if(ret == 0) dis[u] = -1;return ret;
}
inline int dinic(){int ret = 0;while(bfs()){memcpy(cur,head,sizeof head);ret += dfs(S,inf);}return ret;
}
#undef v
int n;
inline int f(int x,int y){y += 102;return x*210+y;
}
int a[maxn],b[maxn],c[maxn],le[maxn],ri[maxn];
inline int calc(int i,int x){return a[i]*x*x+b[i]*x+c[i];
}
int main(){S = maxnode - 5;T = S+1;read(n);int m;read(m);int lim = -inf;for(int i=1;i<=n;++i){read(a[i]);read(b[i]);read(c[i]);}for(int i=1;i<=n;++i){read(le[i]);read(ri[i]);insert(S,f(i,le[i]-1),inf);for(int j=le[i];j<=ri[i];++j){lim = cat_max(lim,calc(i,j)+1); }insert(f(i,ri[i]),T,inf);}for(int i=1;i<=n;++i){for(int j=le[i];j<=ri[i];++j){insert(f(i,j-1),f(i,j),lim - calc(i,j));}}for(int i=1,u,v,d;i<=m;++i){read(u);read(v);read(d);for(int j=le[u];j<=ri[u];++j){if(j - d - 1 >= le[v] - 1 && j - d -1 <= ri[v])insert(f(u,j-1),f(v,j-d-1),inf);}}int ans = dinic();printf("%d\n",lim*n - ans);getchar();getchar();return 0;
}

转载于:https://www.cnblogs.com/Skyminer/p/6337959.html

CodeForces - 434D Nanami's Power Plant相关推荐

  1. Combined Cycle Power Plant Data Set(初学练手:详解)

    今天我们用UCI大学公开的数据集实践一下. 问题 abstract: The dataset contains 9568 data points collected from a Combined C ...

  2. 什么是虚拟电厂(Virtual Power Plant, VPP)

    三分钟带你看懂"虚拟电厂"的应用与展望 虚拟电厂技术现状及展望 泛在电力物联网下虚拟电厂的研究现状与展望 马斯克看好的虚拟电厂能解决缺电难题吗? 什么是"虚拟电厂&quo ...

  3. Codeforce 水题报告(2)

    又水了一发Codeforce ,这次继续发发题解顺便给自己PKUSC攒攒人品吧 CodeForces 438C:The Child and Polygon: 描述:给出一个多边形,求三角剖分的方案数( ...

  4. The Power of Ten – Rules for Developing Safety Critical Code

    New Horizon 探测器的代码就是 JPL 写的,真厉害 http://pixelscommander.com/wp-content/uploads/2014/12/P10.pdf Gerard ...

  5. Microbiome:揩老鼠皮毛揩来高分文章——野生哺乳动物的皮肤和肠道微生物对核污染的反应...

    野生哺乳动物的皮肤和肠道微生物群对环境污染做出的反应 Skin and gut microbiomes of a wild mammal respond to different environmen ...

  6. Microbiome:揩老鼠皮毛揩来高分文章——野生哺乳动物的皮肤和肠道微生物群对环境污染做出的反应

    文章目录 野生哺乳动物的皮肤和肠道微生物群对环境污染做出的反应 划重点 热心肠日报 摘要 背景 结果 结论 关键词 前言 方法 堤岸田鼠诱捕与研究设计 放射量测定 拭子样本采集 DNA提取和16S r ...

  7. 珍惜当下、Relish the Moment

    珍惜当下 Tucked away in our subconsciousness is an idyllic vision. We see ourselves on a long trip that ...

  8. Gartner:2019十大战略技术趋势

    本文转载自微信公众号"CIO之家",ID:imciow, 资料原文来自Gartner. Gartner公司列出了企业组织在2019年需要探究的几大战略性技术趋势:智能设备.增强分析 ...

  9. Gartner的2019战略性技术趋势:量子计算、区块链、AI

    Gartner的2019战略性技术趋势:量子计算.区块链.AI Gartner列出了企业和组织在2019年需要探究的十大战略性技术趋势:智能设备.增强分析.AI驱动的开发.数字孪生.边缘计算.沉浸式体 ...

最新文章

  1. 2022-2028年中国粘网胶行业市场深度评估及发展前景规划报告
  2. [日志]保证让你一天不困的方法
  3. [PHP] 使用 pcntl 库实现PHP多进程
  4. MySQL引擎innodb和mysum_mysql数据库引擎InnoDB和MyISAM
  5. 外部工具连接SaaS模式云数仓MaxCompute 实战—— 数据库管理工具篇
  6. 数据库mysql表怎么设置外键_如何设置数据库中的外键
  7. redis3.0.7_sds.c_sdsnewlen()
  8. GY歌谣之读懂每行代码(飞智) 2020 10 16 Duplicate keys detected
  9. [置顶] “非主流”Web容器之TomJetty之让服务动起来
  10. 阿里五年晋升三次,选择真的大于努力?
  11. 分区供水条件口诀_分区供水高频考点,收藏哦
  12. 数据集的划分--训练集、验证集和测试集
  13. 归纳遇到的一些参考文献的格式问题
  14. Gateway一文详解
  15. 软件如何进行压力测试,软件如何进行压力测试?
  16. 基于COMSOL的螺栓连接 的几种有限元建模方
  17. 转载-Android 前沿UI
  18. c语言tft屏浮点数显示,编个可显示中文的TFT程序
  19. 12个颠覆的领域:物理世界的活化
  20. zuul 详解,带视频

热门文章

  1. iOS动态部署之RSA加密传输Patch补丁
  2. Struts2框架学习之七:避免表单重复提交
  3. eclipse启动tomcat遇到404错误
  4. 【HTTP】之HTTP 错误 401.3 - 访问被资源 ACL 拒绝
  5. (转)浅析当今视频文件的格式
  6. 在苏州当老师大概博士毕业,工作稳定后就准备要孩子了
  7. 【转】 关于寄存器ESP和EBP的一些理解
  8. spark 在启动的时候出现JAVA_HOME not set
  9. Android ViewModel+liveData+lifecycle+databinding打造MVVM
  10. MariaDB(MySQL)数据库的介绍及使用示例