题目链接

差分约束。

设\(s[i]\)表示前\(i\)个位置有多少个数,那么对于一个限制条件\((L,R,C)\),显然有

\[s[R]-s[L-1]>=C
\]

于是连一条\(L-1\)到\(R\)边权为\(C\)的边。

但为了保证能从\(0\)走到\(max(b)\),我们还需从\(1\)到\(n\),对\(i-1\)和\(i\)连一条权为\(0\)的边,对\(i\)和\(i-1\)连一条权为\(-1\)的边,

这也很好理解,因为

\[s[i]-s[i-1]>=0,s[i-1]-s[i]>=-1
\]

显然成立。

然后从\(0\)到\(max(b)\)跑一遍最长路就好了。注意有正权边,所以不能跑Dijkstra,跑SPFA。

#include <cstdio>
#include <algorithm>
#include <queue>
#include <cstring>
using namespace std; #define Open(s) freopen(s".in","r",stdin);freopen(s".out","w",stdout);
#define Close fclose(stdin);fclose(stdout);
const int MAXN = 1010;
int n, a, b, c, r;
struct Edge{
int next, to, dis;
}e[MAXN << 2];
int head[MAXN], num;
inline void Add(int from, int to, int dis){
e[++num] = (Edge){ head[from], to, dis };
head[from] = num;
}
queue <int> q;
int dis[MAXN], vis[MAXN];
int main(){
Open("sequence");
scanf("%d", &n);
for(int i = 1; i <= n; ++i){
scanf("%d%d%d", &a, &b, &c);
r = max(r, b);
Add(a - 1, b, c);
}
for(int i = 1; i <= r; ++i)
Add(i - 1, i, 0), Add(i, i - 1, -1);
memset(dis, 128, sizeof dis); dis[0] = 0;
q.push(0);
while(!q.empty()){
int now = q.front();
q.pop();
vis[now] = 0;
for(int i = head[now]; i; i = e[i].next)
if(dis[e[i].to] < dis[now] + e[i].dis){
dis[e[i].to] = dis[now] + e[i].dis;
if(!vis[e[i].to]) q.push(e[i].to), vis[e[i].to] = 1;
}
}
printf("%d\n", dis[r]);
Close;
return 0;
}

【洛谷 P1645】 序列 (差分约束)的更多相关文章

  1. 种树-洛谷P1250(差分约束)

    传送门 令前缀和为s[i],则⼀一个要求等价于 s[r] - s[l - 1] >= x. 题中还有别的要求,包括 s[i] - s[i - 1] <= 1 和 s[i] - s[i- 1 ...

  2. 洛谷5026 Lycanthropy 差分套差分

    题目链接 https://www.luogu.com.cn/problem/P5026 题意 在一个长度为m的序列中,每次给一个下标x,和一个权值v,然后从x-v*3到x-v*2单调递增,从x-v*2 ...

  3. 洛谷 P4597 序列sequence 解题报告

    P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...

  4. [洛谷P2127] 序列排序

    洛谷题目链接:序列排序 题目描述 小C有一个N个数的整数序列,这个序列的中的数两两不同.小C每次可以交换序列中的任意两个数,代价为这两个数之和.小C希望将整个序列升序排序,问小C需要的最小代价是多少? ...

  5. 洛谷P4891 序列 || 膜法阵,魔法阵

    https://www.luogu.org/problemnew/show/P4891 一道几乎一样的题http://210.33.19.103/contest/1130/problem/3 题面ht ...

  6. 洛谷P4891 序列(势能线段树)

    洛谷题目传送门 闲话 考场上一眼看出这是个毒瘤线段树准备杠题,发现实在太难调了,被各路神犇虐哭qwq 考后看到各种优雅的暴力AC......宝宝心里苦qwq 思路分析 题面里面是一堆乱七八糟的限制和性 ...

  7. 题解【洛谷P1645/CJOJ1244】序列

    P1645 序列 Description 有一个整数序列,它的每个数各不相同,我们不知道它的长度(即整数个数),但我们知道在某些区间中至少有多少个整数,用区间(Li,Ri,Ci)来描述,表示这个整数序 ...

  8. 洛谷P1631 序列合并

    P1631 序列合并 236通过 657提交 题目提供者xmyzwls 标签堆 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 为什么不行? 题目描述 有两个长度都是N的序列A和B,在A和B中 ...

  9. 洛谷P3321 序列统计

    气死了,FFT了半天发现是NTT... 1004535809 这个东西是NTT模数,原根为3. 题意:给定集合,元素的大小不超过M.用这些元素组成长为n的序列,要求乘积模M为k,求方案数. n < ...

随机推荐

  1. Objective-C反射机制

    oc反射机制有三个用途: 1.获得Class Class LoginViewController = NSClassFromString(@"LoginViewController" ...

  2. python简单的数据清洗,数据筛选方法归类

    创建数组有两种方式,1.直接赋值 2.随机变量生成随机生成包括4种:np.arange(20),np.linspace(0,10,5),np.logspace(0,2,5),np.random.ran ...

  3. 汇编指令MOVSX与MOVZX

    MOVSX 操作数A ,操作数B MOVZX 操作数A ,操作数B 相同点:操作数B 空间必须小于 操作数A 1.格式与MOV基本相同 2.能完成小存储单元向大存储单元的数据传送 比如 movsx e ...

  4. Qt 使用irrlicht(鬼火)3D引擎

    项目中需要加载简单的3D场景.资深老前辈推荐使用开源小巧的引擎irrlicht. 关于irrlicht,来之百度百科 Irrlicht引擎是一个用C++书写的高性能实时的3D引擎,可以应用于C++程序 ...

  5. zabbix从入门到精通

    第1章 zabbix监控 1.1 为什么要监控 在需要的时刻,提前提醒我们服务器出问题了 当出问题之后,可以找到问题的根源   网站/服务器 的可用性 1.1.1 网站可用性 在软件系统的高可靠性(也 ...

  6. 官方文档 恢复备份指南五 Configuring the RMAN Environment

    本章内容: Configuring the Environment for RMAN Backups    配置RMAN环境 Configuring RMAN to Make Backups to a ...

  7. idea 快捷键(复制)

    Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 “!”键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Shift+Click,可以关闭文件Ctrl+[ ...

  8. C - 红与黑

    C - 红与黑 Time Limit: 1000/1000MS (C++/Others) Memory Limit: 65536/65536KB (C++/Others) Problem Descri ...

  9. win7 Pthreads

    扩展地址 http://docs.php.net/manual/zh/book.pthreads.php 注意事项 php5.3或以上,且为线程安全版本.apache和php使用的编译器必须一致. 通 ...

  10. 一道js的前端面试题,主要弄清楚逗号表达式的作用

    群里看到的一道前端JS面试题.我以为我会,其实我错了.找了很多资料,写下来. var i,j,k; for( i = 0 , j = 0; i < 10 , j < 6; i++ , j+ ...