Description

给 \(N\) 个格子区间涂色,有两类限制条件

  • 区间 \([L,R]\) 内至少 \(K\) 个
  • 区间 \([L,R]\) 外至少 \(K\) 个

    求最少要涂多少个格子

Solution

显然有单调性,所以二分

当限定了总个数后,差分约束来判定可行性

直接写bellman-ford就可以

训练时候忘记建 \(d[i+1]-d[i] \ge 0\) 这条边

#include <bits/stdc++.h>
using namespace std; const int INF = 0x3f3f3f3f;
const int MAXN = 3005; int dist[MAXN];
struct Edge {
int u,v,cost;
Edge(int _u=0,int _v=0,int _cost=0):u(_u),v(_v),cost(_cost){};
}; vector <Edge> E; bool bellman_ford(int start,int n) {
for(int i=1;i<=n;i++) {
dist[i] = INF;
}
dist[start]=0;
for(int i=1;i<n;i++) {
bool flag=false;
for(int j=0;j<E.size();j++) {
int u=E[j].u;
int v=E[j].v;
int cost=E[j].cost;
if(dist[v]>dist[u]+cost) {
dist[v]=dist[u]+cost;
flag=true;
}
}
if(!flag) return true;
}
for(int j=0;j<E.size();j++) {
if(dist[E[j].v] > dist[E[j].u] + E[j].cost) return false;
}
return true;
} int T,n,m1,m2; struct Item {
int l,r,k;
} r1[3005],r2[3005]; int main() {
ios::sync_with_stdio(false);
cin>>T;
while(T--) {
cin>>n>>m1>>m2;
for(int i=1;i<=m1;i++) cin>>r1[i].l>>r1[i].r>>r1[i].k;
for(int i=1;i<=m2;i++) cin>>r2[i].l>>r2[i].r>>r2[i].k;
int L=0,R=n;
while(R>L) {
int mid=(L+R)/2;
//cout<<"checking "<<mid<<endl;
E.clear();
for(int i=1;i<=n;i++)
E.push_back(Edge(i,i+1,1)),
E.push_back(Edge(i+1,i,0));
for(int i=1;i<=m1;i++) {
E.push_back(Edge(r1[i].r+1,r1[i].l,-r1[i].k));
}
for(int i=1;i<=m2;i++) {
E.push_back(Edge(r2[i].l,r2[i].r+1,mid-r2[i].k));
}
E.push_back(Edge(1,n+1,mid));
E.push_back(Edge(n+1,1,-mid));
//for(int i=0;i<E.size();i++) cout<<E[i].u<<" "<<E[i].v<<" "<<E[i].cost<<endl;
if(bellman_ford(1,n+1)) R=mid;
else L=mid+1;
}
cout<<L<<endl;
}
}

[CCPC2019 哈尔滨] A. Artful Paintings - 差分约束,最短路的更多相关文章

  1. POJ 3159 Candies(差分约束+最短路)题解

    题意:给a b c要求,b拿的比a拿的多但是不超过c,问你所有人最多差多少 思路:在最短路专题应该能看出来是差分约束,条件是b - a <= c,也就是满足b <= a + c,和spfa ...

  2. POJ 3169 Layout(差分约束+最短路)题解

    题意:有一串数字1~n,按顺序排序,给两种要求,一是给定u,v保证pos[v] - pos[u] <= w:二是给定u,v保证pos[v] - pos[u] >= w.求pos[n] - ...

  3. Layout---poj3169(差分约束+最短路spfa)

    题目链接:http://poj.org/problem?id=3169 有n头牛站成一排 在他们之间有一些牛的关系比较好,所以彼此之间的距离不超过一定距离:也有一些关系不好的牛,希望彼此之间的距离大于 ...

  4. poj3159 差分约束 spfa

    //Accepted 2692 KB 1282 ms //差分约束 -->最短路 //TLE到死,加了输入挂,手写queue #include <cstdio> #include & ...

  5. Candies-POJ3159差分约束

    Time Limit: 1500MS Memory Limit: 131072K Description During the kindergarten days, flymouse was the ...

  6. ZOJ 2770火烧连营——差分约束

    偶尔做了一下差分约束. 题目大意:给出n个军营,每个军营最多有ci个士兵,且[ai,bi]之间至少有ki个士兵,问最少有多少士兵. ---------------------------------- ...

  7. POJ 2983 Is the Information Reliable? 差分约束

    裸差分约束. //#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #i ...

  8. 2014 Super Training #6 B Launching the Spacecraft --差分约束

    原题:ZOJ 3668 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3668 典型差分约束题. 将sum[0] ~ sum ...

  9. POJ 1364 King --差分约束第一题

    题意:求给定的一组不等式是否有解,不等式要么是:SUM(Xi) (a<=i<=b) > k (1) 要么是 SUM(Xi) (a<=i<=b) < k (2) 分析 ...

随机推荐

  1. gRPC搭建使用方式

    gRpc 官网  链接 新建服务端项目 在服务端内先编写一个 .proto 文件 greet.proto syntax = "proto3"; service Greeter { ...

  2. 第2章.数组和ArrayList

    2.1 数组基本概念 数组是可索引的数据的集合.数组既可以是内置的类型,也可以是用户自定义的类型.事实上,把数组数据称为对象大概是最简便的方式.C#中数组实际上就是对象的本身,因为它们都源于Syste ...

  3. 剑指offer-面试题5-替换空格-字符串

    /* 题目: 请实现一个函数,把字符串中的每个空格替换成'%20'. 例如输入“We are happy",则输出 ”We%20are%happy". */ /* 结题思路: 考虑 ...

  4. 数据结构(集合)学习之Collection和Iterator

    集合 1.集合与数组 数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用. 集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使 ...

  5. final 和 static之间的区别和联系

    关键字final和关键字static两者的含义并不相似,但是笔者常常使用一段时间后就会忘记它们之间的区别,因为它俩总是相伴着出现.当只出现其中一个时,就对其代表的含义不甚清晰了.故而特地将相关知识点记 ...

  6. Python集合详解

    集合介绍: 集合(set)是一个无序的不重复元素序列.可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典 ...

  7. 婴儿潮一代\千禧一代\X一代\Z一代含义

    (一)婴儿潮一代 婴儿潮一代是指各国的生育高峰期.每个时期的婴儿潮一代都会给各国经济带来不小的刺激作用,但同样的当他们退休时也会给政府的养老保险带来巨大的压力. 在中国,从统计数据来看生育高峰出现在1 ...

  8. 小程序onShow事件获取options方法

    微信小程序 onShow() 事件 onShow() 事件不接受参数,因此无法获取页面 url 传递过来的参数,只有 onLoad() 事件可以. onShow(options){ console.l ...

  9. 分布式集群HA模式部署

    一:HDFS系统架构 (一)利用secondary node备份实现数据可靠性 (二)问题:NameNode的可用性不高,当NameNode节点宕机,则服务终止 二:HA架构---提高NameNode ...

  10. nohup npm start &启动之后关闭终端程序没有后台运行

    感谢:https://blog.csdn.net/nsj820/article/details/5862231 “在当shell中提示了nohup成功后,还需要按终端上键盘任意键退回到shell输入命 ...