这题$n$倍经验……

考虑差分约束:

我们设$s_i$表示$[-1, i]$这个区间中数字的种类数,那么一个条件的限制相当于$s_{b_i} - s_{a_i - 1} \leq c_i$,那么连边$(a_i - 1, b_i, c_i)$。

再挖掘一些隐含条件:$0 \leq s_i - s_{i - 1} \leq 1$,那么再连边$(i - 1, i, 0)$和$(i, i - 1, -1)$。

然后从$s_{-1}$开始跑最长路即可,因为题目中保证了$c_i \leq b_i - a_i + 1$,所以不会有正环,也就是说最后的$dis_{50000}$就是答案。

时间复杂度$O(spfa ???)$。

感觉这些最长路的题目反正要把边权倒过来,不如直接用最短路建模求解。

Code:

#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;const int N = 50010;
const int M = 2e5 + 5;
const int Maxn = 50002;int testCase, n, tot, head[N], dis[N];
bool vis[N];struct Edge {int to, nxt, val;
} e[M];inline void add(int from, int to, int val) {e[++tot].to = to;e[tot].val =val;e[tot].nxt = head[from];head[from] = tot;
}inline void read(int &X) {X = 0; char ch = 0; int op = 1;for(; ch > '9' || ch < '0'; ch = getchar())if(ch == '-') op = -1;for(; ch >= '0' && ch <= '9'; ch = getchar())X = (X << 3) + (X << 1) + ch - 48;X *= op;
}queue <int> Q;
void spfa(int st) {memset(vis, 0, sizeof(vis));memset(dis, 0x3f, sizeof(dis));vis[st] = 1, dis[st] = 0;Q.push(st);for(; !Q.empty(); ) {int x = Q.front(); Q.pop();vis[x] = 0;for(int i = head[x]; i; i = e[i].nxt) {int y = e[i].to;if(dis[y] > dis[x] + e[i].val) {dis[y] = dis[x] + e[i].val;if(!vis[y]) {vis[y] = 1;Q.push(y);}}}}
}int main() {for(read(testCase); testCase--; ) {read(n);tot = 0; memset(head, 0, sizeof(head));for(int x, y, v, i = 1; i <= n; i++) {read(x), read(y), read(v);x += 1, y += 2;add(x, y, -v);}for(int i = 1; i < Maxn; i++) add(i, i + 1, 0);for(int i = Maxn; i > 1; i--) add(i, i - 1, 1);spfa(1);printf("%d\n", -dis[Maxn]);if(testCase) printf("\n");}return 0;
}

View Code

转载于:https://www.cnblogs.com/CzxingcHen/p/9803433.html

UVA1723 Intervals相关推荐

  1. 题解:UVA1723 Intervals

    差分约束裸题 根据题意建立相应的图 设s[k]表示0~k中最少取多少个整数,根据题意可知 s[bi]-s[ai-1]>=ci 还有一些隐含条件 s[k]-s[k-1]>=0.    0~k ...

  2. 【图论专题】差分约束系统

    整理的算法模板合集: ACM模板 题目列表: 题目 算法 AcWing 1169. 糖果 差分约束系统.超级源点.求最值 UVA1723 Intervals 差分约束.求最值 AcWing 1170. ...

  3. 【UVA1723】Intervals

    题面 https://www.luogu.org/problem/UVA1723 题解 #include<cstdio> #include<iostream> #include ...

  4. R语言ggplot2可视化:置信区间与分组具有相同色彩、自定义置信区间带的色彩、Make confidence intervals the same color as line by group

    R语言ggplot2可视化:置信区间与分组具有相同色彩.自定义置信区间带的色彩.Make confidence intervals the same color as line by group 目录

  5. 置信区间(Confidence Intervals)是什么?如何计算置信区间?置信区间的两种计算方法是什么?二值样本置信区间如何计算?如何基于bootstrap抽样进行置信区间计算?

    置信区间(Confidence Intervals)是什么?如何计算置信区间?置信区间的两种计算方法是什么?二值样本置信区间如何计算?如何基于bootstrap抽样进行置信区间计算? 目录 置信区间( ...

  6. LeetCode 56. Merge Intervals

    原题链接在这里:https://leetcode.com/problems/merge-intervals/ 题目: Given a collection of intervals, merge al ...

  7. Merge Intervals

    代码: 1 #include<iostream> 2 #include<vector> 3 #include<algorithm> 4 5 using namesp ...

  8. LeetCode Merge Intervals

    Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6],[8, ...

  9. LeetCode:Merge Intervals

    题目链接 Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6 ...

最新文章

  1. C ++ 17中有哪些新功能?
  2. SQL Server密码爆破工具SQLdict
  3. re管理器Java_自定义布局管理器-FormLayout
  4. ES6 数组、对象的扩展
  5. java年月日时分秒格式_Java 日期时间 LocalDate LocalTime LocalDateTime类
  6. python_83_random_应用验证码
  7. 批处理脚本 - 可移动的远程桌面启动器
  8. linux ps命令查看当前线程正在执行的程序
  9. 微信小程序图片转换成文字_涨知识!这个微信小程序,能将纸上文字转换成电子版...
  10. Python基础学习资料视频下载链接
  11. PS怎么把图片处理的更清晰
  12. Spring boot 2 雷神
  13. 【沃顿商学院学习笔记】商业基础——Financing:02 年金 Annuity
  14. 台式电脑显示配置100%请勿关闭计算机,Win7关机提示“配置Windows Update已完成30%请勿关闭计算机”怎么解决...
  15. greenDao的使用与封装
  16. MySQL取离当前时间最近的记录
  17. 关于PPP拨号的接入点
  18. Echarts 实现动态地图
  19. 看影片《明日边缘》有感
  20. 矩阵中的代数重数与几何重数——课程笔记

热门文章

  1. 生活的压力和生命的尊严,哪个更重要?
  2. 论文阅读《Characterizing BDS signal-in-space performance from integrity perspective》1
  3. FA-PEG-SH 叶酸PEG巯基
  4. java无法验证证书_如何解决“证书无效,不能用于验证本网站的身份”错误?...
  5. 常见的 NoSQL 数据库有哪些?一篇详尽(图表展示)
  6. Sprite Kit教程
  7. MacBook常用快捷键总结
  8. CF1027D Mouse Hunt(topo总结)
  9. ppt如何替换其他mo ban_PPT如何做视觉化的数据图表?
  10. h5做app和原生app有什么区别?