UVA1723 Intervals
这题$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:
![](/assets/blank.gif)
![](/assets/blank.gif)
#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相关推荐
- 题解:UVA1723 Intervals
差分约束裸题 根据题意建立相应的图 设s[k]表示0~k中最少取多少个整数,根据题意可知 s[bi]-s[ai-1]>=ci 还有一些隐含条件 s[k]-s[k-1]>=0. 0~k ...
- 【图论专题】差分约束系统
整理的算法模板合集: ACM模板 题目列表: 题目 算法 AcWing 1169. 糖果 差分约束系统.超级源点.求最值 UVA1723 Intervals 差分约束.求最值 AcWing 1170. ...
- 【UVA1723】Intervals
题面 https://www.luogu.org/problem/UVA1723 题解 #include<cstdio> #include<iostream> #include ...
- R语言ggplot2可视化:置信区间与分组具有相同色彩、自定义置信区间带的色彩、Make confidence intervals the same color as line by group
R语言ggplot2可视化:置信区间与分组具有相同色彩.自定义置信区间带的色彩.Make confidence intervals the same color as line by group 目录
- 置信区间(Confidence Intervals)是什么?如何计算置信区间?置信区间的两种计算方法是什么?二值样本置信区间如何计算?如何基于bootstrap抽样进行置信区间计算?
置信区间(Confidence Intervals)是什么?如何计算置信区间?置信区间的两种计算方法是什么?二值样本置信区间如何计算?如何基于bootstrap抽样进行置信区间计算? 目录 置信区间( ...
- LeetCode 56. Merge Intervals
原题链接在这里:https://leetcode.com/problems/merge-intervals/ 题目: Given a collection of intervals, merge al ...
- Merge Intervals
代码: 1 #include<iostream> 2 #include<vector> 3 #include<algorithm> 4 5 using namesp ...
- LeetCode Merge Intervals
Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6],[8, ...
- LeetCode:Merge Intervals
题目链接 Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6 ...
最新文章
- C ++ 17中有哪些新功能?
- SQL Server密码爆破工具SQLdict
- re管理器Java_自定义布局管理器-FormLayout
- ES6 数组、对象的扩展
- java年月日时分秒格式_Java 日期时间 LocalDate LocalTime LocalDateTime类
- python_83_random_应用验证码
- 批处理脚本 - 可移动的远程桌面启动器
- linux ps命令查看当前线程正在执行的程序
- 微信小程序图片转换成文字_涨知识!这个微信小程序,能将纸上文字转换成电子版...
- Python基础学习资料视频下载链接
- PS怎么把图片处理的更清晰
- Spring boot 2 雷神
- 【沃顿商学院学习笔记】商业基础——Financing:02 年金 Annuity
- 台式电脑显示配置100%请勿关闭计算机,Win7关机提示“配置Windows Update已完成30%请勿关闭计算机”怎么解决...
- greenDao的使用与封装
- MySQL取离当前时间最近的记录
- 关于PPP拨号的接入点
- Echarts 实现动态地图
- 看影片《明日边缘》有感
- 矩阵中的代数重数与几何重数——课程笔记
热门文章
- 生活的压力和生命的尊严,哪个更重要?
- 论文阅读《Characterizing BDS signal-in-space performance from integrity perspective》1
- FA-PEG-SH 叶酸PEG巯基
- java无法验证证书_如何解决“证书无效,不能用于验证本网站的身份”错误?...
- 常见的 NoSQL 数据库有哪些?一篇详尽(图表展示)
- Sprite Kit教程
- MacBook常用快捷键总结
- CF1027D Mouse Hunt(topo总结)
- ppt如何替换其他mo ban_PPT如何做视觉化的数据图表?
- h5做app和原生app有什么区别?