传送门:http://poj.org/problem?id=1201

题意:

有n个如下形式的条件:,表示在区间[, ]内至少要选择个整数点.问你满足以上所有条件,最少需要选多少个点?

思路:第一道差分约束题,有关差分约束知识详见https://blog.csdn.net/whereisherofrom/article/details/78922648(个人感觉这个博主写的挺好的)

表示从区间[0,x]中选择的整数点个数,则有=c_i\rightarrow s_{b_i+1}-s_{a_i}>=c_i" class="mathcode" src="https://private.codecogs.com/gif.latex?s_%7Bb_i%7D-s_%7Ba_i-1%7D%3E%3Dc_i%5Crightarrow%20s_%7Bb_i+1%7D-s_%7Ba_i%7D%3E%3Dc_i">(因为=0" class="mathcode" src="https://private.codecogs.com/gif.latex?a_i%3E%3D0">,会出现数组下标为-1的情况),如果只靠这个式子是无法得出答案的,题中还有隐藏的约束即是=0" class="mathcode" src="https://private.codecogs.com/gif.latex?s_%7Bi+1%7D-s_i%3E%3D0">和=-1" class="mathcode" src="https://private.codecogs.com/gif.latex?s_i-s_%7Bi+1%7D%3E%3D-1">,题中要求最小值,所以用spfa跑一遍最长路即可。

代码:

#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
const int maxn = 50005;
const int INF = 0x3f3f3f3f; int tot;
struct node
{
int to;
int next;
int w;
};
node edges[maxn * 3]; int head[maxn];
int d[maxn];
bool vis[maxn]; void add_edges(int u, int v, int w)
{
edges[++tot].to = v;
edges[tot].w = w;
edges[tot].next = head[u];
head[u] = tot;
} int l = 50005;
int r = -1; void spfa()
{
for(int i = l; i <= r; i++)
vis[i] = false, d[i] = -INF;
d[l] = 0;
queue<int>q;
q.push(l);
while(!q.empty())
{
int x = q.front();
q.pop();
vis[x] = false;
for(int i = head[x]; i; i = edges[i].next)
{
node v = edges[i];
if(d[v.to] < d[x] + v.w)
{
d[v.to] = d[x] + v.w;
if(!vis[v.to])
{
vis[v.to] = true;
q.push(v.to);
}
}
}
}
}
int main()
{
int n;
scanf("%d", &n);
for(int i = 1; i <= n; i++)
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
add_edges(a, b + 1, c);
r = max(r, b + 1); //求区间右端点
l = min(l, a); //求区间左端点
}
for(int i = l; i < r; i++)
{
add_edges(i + 1, i, -1);
add_edges(i, i + 1, 0);
}
spfa();
cout << d[r] << endl;
}

最新文章

  1. ENode 2.8 最新架构图简介
  2. C# MVC ( 添加路由规则以及路由的反射机制 )
  3. Linux之我见
  4. 用@RequestMapping映射请求
  5. 编写linux驱动所用到的头文件(转)
  6. python asyncio笔记
  7. Php检测文件编码方法
  8. .NET,你真的 知道了吗
  9. 从汇编看c++中成员函数指针(一)
  10. BootStrap 智能表单系列 七 验证的支持
  11. 我们究竟什么时候可以使用Ehcache缓存(转)
  12. [ACM] ZOJ 3816 Generalized Palindromic Number (DFS,暴力枚举)
  13. 【python问题系列--2】脚本运行出现语法错误:IndentationError: unindent does not match any outer indentation level
  14. 【EntityFramework 6.1.3】个人理解与问题记录
  15. python脚本文件传参并通过token登录后爬取数据实例
  16. Spring Cloud构建微服务架构 - 服务网关
  17. 【java】类的初识
  18. Object-C-block
  19. 通过HTTP协议发送远程消息
  20. 两种获取MySql数据库中所有表的主键和外键约束信息的Sql语句

热门文章

  1. CSS - 美化字体 =&gt; CSS的-font-smoothin属性优化
  2. 小程序地图开发周边信息POI展示为列表
  3. cf 543 D. Road Improvement
  4. 三十、SAP中的内置图标
  5. 132-PHP子类和父类同名函数的调用
  6. 与Power BI一起使用Cortana
  7. C#数据库查询和操作大全
  8. wget 403 forbidden
  9. ZOJ - 3123 Subsequence (滑动窗口)
  10. UVA - 1614 Hell on the Markets(奇怪的股市)(贪心)