题目链接


题目大意:

有N≤3e3N≤3e3N≤3e3个格子,你可以任意给每个格子染色,但是要满足M≤3e3M≤3e3M≤3e3限制条件,限制条件有两种类型:

  1. 区间[l,r][l,r][l,r]中被染色的格子数量不少于KKK。
  2. 区间[l,r][l,r][l,r]外被染色的格子数量不少于KKK。
    在满足所有限制条件下求染色格子数量的最小值。

题解思路:

1.首先我们知道全部涂完肯定是可以的,现在要求的是最小值,那么我们第一反应就是二分嘛!
2.上面对于区间的限制,这很容易联想到差分约束系统。
我们假设SumiSum_iSumi​是第i个点前面涂了多少个颜色的格子, midmidmid是我们涂了多少个格子。
那么我们就有如下不等式:
对于限制1:
Sumr−Suml−1≥KSum_r-Sum_{l-1}\geq KSumr​−Suml−1​≥K
对于限制2:
Sumr−Suml−1≤mid−KSum_r-Sum_{l-1}\leq mid - KSumr​−Suml−1​≤mid−K

还有隐藏限制就是Sumi−1≤SumiSum_{i-1} \leq Sum_iSumi−1​≤Sumi​
打模拟赛的时候忘记的条件:Sumi−Sumi−1≤1Sum_i-Sum_{i-1}\leq1Sumi​−Sumi−1​≤1
因为这两个隐藏条件,这个图是联通的。
那么很明显这不就是可以用差分约束解决吗?

但是这里直接跑是会T的,我们要根据建的图进行优化。

通过观察建图我们知道,在跑spfa的时候,如果某个点的distdistdist数组变成负数了,那么一点存在负环,因为假如l−>r的最短路是负数,r−>l是0,那么这里就可以构成负环了!l->r的最短路是负数,r->l是0,那么这里就可以构成负环了!l−>r的最短路是负数,r−>l是0,那么这里就可以构成负环了!

加了这个优化就可以过了


#include <bits/stdc++.h>using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int maxn = 1e4 + 10;
int vis[maxn];
bool used[maxn];
vector<pair<int, int> > g[maxn];
int dist[maxn];
bool inQue[maxn];
queue<int> que;
int n, m1, m2;void init(int n) {for(int i = 0; i <= n + 1; i++) {g[i].clear();dist[i] = INF;vis[i] = 0;used[i] = 0;inQue[i] = 0;}
}bool spfa(int src) {//模板dist[src] = 0;while (!que.empty()) que.pop();que.push(src);inQue[src] = true;while (!que.empty()) {int u = que.front();used[u] = 1;que.pop();for (int i = 0; i < g[u].size(); i++) {if (dist[u] + g[u][i].second < dist[g[u][i].first]) {dist[g[u][i].first] = dist[u] + g[u][i].second;if( dist[g[u][i].first] < 0) return false;if (!inQue[g[u][i].first]) {inQue[g[u][i].first] = true;vis[g[u][i].first]++;if(vis[g[u][i].first] > n) return false;que.push(g[u][i].first);}}}inQue[u] = false;}return true;
}struct edge {int l, r, w;
};
vector<edge> ed;
void build(int n, int mid) {init(n);for(int i = 0; i < m1; i++) {int l = ed[i].l, r = ed[i].r, w = ed[i].w;g[r].push_back({l - 1, -w});}for(int i = m1; i < m1 + m2; i++) {int l = ed[i].l, r = ed[i].r, w = ed[i].w;g[l - 1].push_back({r, mid - w});}for(int i = 1; i <= n; i++) {g[i].push_back({i - 1, 0});}for(int i = 1; i <= n; i++) {g[i - 1].push_back({i, 1});}g[n].push_back({0, -mid});g[0].push_back({n, mid});
}int main() {int t;cin >> t;while(t--) {ed.clear();cin >> n >> m1 >> m2;for(int i = 0; i < m1 + m2; i++) {int l, r, w;cin >> l >> r >> w;ed.push_back({l, r, w});}int l = 0, r = n;while(l <= r) {int mid = (l + r) / 2;build(n, mid);//建图if(spfa(0)) {r = mid - 1;} else {l = mid + 1;}}cout << l << endl;}
}

差分约束问题 ---- 2019ccpc哈尔滨A. Artful Paintings[二分+差分约束+建图剪枝]相关推荐

  1. 解题报告:NOIP2013 车站分级(拓扑序递推求解差分约束、建图优化O(n+m)) 超详细讲解

    本题是2013年NOIP普及组的压轴题 差分约束裸题. 计算当前线路中最小的级别(比较始发站和终点站). 整条线路中所有大于这个级别的都必须停靠 所有未停靠的站点的级别一定小于这个级别 也就是说所有未 ...

  2. 【POJ - 1275】Cashier Employment(差分约束,建图)

    题干: A supermarket in Tehran is open 24 hours a day every day and needs a number of cashiers to fit i ...

  3. mysql设置约束l命令_2、MYSQL 基本数据库命令及约束

    [注]sql语句注意不要忘了后面的   "  : ",表示结束符 1.如何登陆数据库服务器 C:\Users\zhg>mysql -uroot -p Enter passwo ...

  4. mysql数据库五大约束_数据库基础知识:数据库中的约束和三大范式

    一.数据库中的范式: 范式,英文名称是NormalForm,它是英国人E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出来的,范式是关系数据库理论的基础,也是我们在设计 ...

  5. mysql中约束_【MySQL】:MySQL中四大约束

    所有的关系型数据库都支持对数据表使用约束,在表上强制执行数据校验,保证数据的完整性. MySQL数据库支持以下四种约束形式: 非空约束 NOT NULL 所有数值类型的值都可以为null. 空字符串和 ...

  6. [ZJOI2010] 贪吃的老鼠(二分+差分+神仙建图网络流)

    problem luogu-P2570 solution 卧槽网络流尼玛神题 首先这个最小延长时间 TTT ,套路地考虑二分,将问题转化为判定性问题. 其次 n,mn,mn,m 和奶酪存在时间 [l, ...

  7. mysql约束_不是吧,阿Sir,MySQL约束你竟然还不懂!

    以前写的太乱了,翻出来重新整理下 系列目录: MySQL入门,问题不大[增删改查极速上手] (一) 引入约束 (1) 约束出现在哪里? 想要讲解约束,就要知道约束用在哪里,用来干嘛? SQL 语言通过 ...

  8. 差分放大电路差模共模公式_差分放大电路对差模信号和共模信号有什么影响?...

    现在在应用中使用的放大电路一般都是由各级级联组成的,直接级联的放大电路各级的直流通路相互关联,因而当前级的静态工作点由于某种原因而稍有偏移时,这种缓慢的微小变化就会逐级影响,致使放大器的输出端产生较大 ...

  9. mysql数据库约束详解_MySQL数据库中的外键约束详解

    使用MySQL开发过数据库驱动的小型web应用程序的人都知道,对关系数据库的表进行创建.检索.更新和删除等操作都是些比较简单的过程.理论上,只要掌握了最常见的SQL语句的用法,并熟悉您选择使用的服务器 ...

最新文章

  1. 逆天神经网络绘制神器!还有暗黑模式
  2. 动手完善个性化弹出提示框的过程及乐趣
  3. Opportunity expected revenue storage field
  4. 5分钟快速接入钉钉实现钉钉考勤
  5. c#实现SQLServer存储照片,并读取照片
  6. 如何加声调口诀_李变美:美容院老板小白如何快速打造自己的引流型文案系统!...
  7. 未找到依赖项 ‘org.apache.spark:spark-hive_2.11:2.4.5‘
  8. 统计学习方法读书笔记2-极大似然估计与梯度下降法
  9. docker nginx 命令。
  10. Editplus 破解
  11. word计算机公式怎么算,word怎么实现自动计算公式
  12. cfree 上面工具栏消失解决办法(不用重下!!!!!)
  13. CCF-CSP计算机职业资格认证备考
  14. Integer[] cannot be converted to int[]
  15. 苹果输入法怎么换行_现在还有没有必要学习五笔输入法呢
  16. 计算机应用 胡丹,正高级
  17. scala利用akka框架封装数据库操作api微服项目
  18. gr-osmosdr支持GNURadio的扩展
  19. Java高级开发0-1项目实战-青鸟商城-Day05
  20. GAN靠「伪造思维」登上Nature子刊:首次合成神经活动数据,脑机接口训练速度提升20倍...

热门文章

  1. python中的counter()、elements()、most_common()和subtract()函数的用法
  2. Python学习笔记.OS学习笔记 OS操作系统(operating system)(三) 日期和时间
  3. 自动驾驶的视觉感知包括哪些内容?
  4. 基于OpenCV的实时睡意检测系统
  5. 简单易上手编译FFmpeg
  6. 一,初次接触html+css需要注意的小问题
  7. MySQL双主一致性架构优化
  8. 《Python数据分析与挖掘实战》一第1章 数据挖掘基础1.1 某知名连锁餐饮企业的困惑...
  9. ARM Linux (S3C6410架构/2.6.35内核)的内存映射(三)
  10. ViewBag、ViewData和TempData使用方法、区别与联系