Intervals(差分约束系统)
http://poj.org/problem?id=1201
题意:给定n个整数闭区间[a,b]和n个整数c,求一个最小的整数集合Z,满足Z里边的数中范围在闭区间[a,b]的个数不小于c个。
思路:根据题目描述,可建模成一个差分约束系统。
设S[i]表示小于等于i的整数的个数,R表示最大的右端点值,L表示最小的左端点值:
则 S[b] - S[a-1] >= c;
转化成:S[a-1] - S[b] <= -c;...... (1)
S[i] - S[i-1] <= 1; ........ (2)
S[i] -S[i-1] >= 0;
转化成:S[i-1] - S[i] <= 0;.......... (3)
(1)(2)(3)即为三个约束条件。最终要求的就是S[R] - S[L-1] >= M,即 S[L-1] - S[R] <= -M;
#include <stdio.h>
#include <string.h>
const int N=;
const int INF=<<;
struct node
{
int u,v,w;
} edge[N];
int dis[N];
int n,cnt,l,r;//l表示所有左端点的最小值,r表示所有右端点的最大值
void add(int u,int v,int w)
{
edge[cnt].u = u;
edge[cnt].v = v;
edge[cnt++].w = w;
}
bool bellman_ford()
{
memset(dis,,sizeof(dis));
int flag = ;//只要某次循环过程中,没能改变源点到各顶点的最短距离,则可以提前结束循环
while(flag)
{
flag = ;
for (int i = ; i < n; i++)
{
int u = edge[i].u;
int v = edge[i].v;
if (dis[v] > dis[u]+edge[i].w)
{
dis[v] = dis[u]+edge[i].w;
flag = ;
}
}
for (int i = l; i <= r; i++)//根据约束条件s[i] <= s[i-1]+1,进一步修改s[i];
{
if (dis[i-]+ < dis[i])
{
dis[i] = dis[i-]+;
flag = ;
}
}
for (int i = r; i >= l; i--)//根据约束条件S[i] >= s[i-1],进一步修改s[i-1];
{
if (dis[i] < dis[i-])
{
dis[i-] = dis[i];
flag = ;
} }
}
return true;
}
int main()
{
int a,b,c;
while(~scanf("%d",&n))
{
cnt = ,r = ,l = INF;
for (int i = ; i < n; i++)
{
scanf("%d %d %d",&a,&b,&c);
add(b,a-,-c);//构造边
if (l > a)
l = a;//左端点的最小值
if (r < b)
r = b;//右端点的最小值
}
bellman_ford();
printf("%d\n",dis[r]-dis[l-]);
}
return ;
}
Intervals(差分约束系统)的更多相关文章
- POJ1201 Intervals差分约束系统(最短路)
Description You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn. Write a p ...
- POJ 1201 Intervals (差分约束系统)
题意 在区间[0,50000]上有一些整点,并且满足n个约束条件:在区间[ui, vi]上至少有ci个整点,问区间[0, 50000]上至少要有几个整点. 思路 差分约束求最小值.把不等式都转换为&g ...
- POJ1201 Intervals[差分约束系统]
Intervals Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 26028 Accepted: 9952 Descri ...
- poj 1201/zoj 1508 intervals 差分约束系统
// 思路 : // 图建好后 剩下的就和上一篇的 火烧连营那题一样了 求得解都是一样的 // 所以稍微改了就过了 // 最下面还有更快的算法 速度是这个算法的2倍#include <ios ...
- PKU 1201 Intervals(差分约束系统+Spfa)
题目大意:原题链接 构造一个集合,这个集合内的数字满足所给的n个条件,每个条件都是指在区间[a,b]内至少有c个数在集合内.问集合最少包含多少个点.即求至少有多少个元素在区间[a,b]内. 解题思路: ...
- 【POJ 1716】Integer Intervals(差分约束系统)
id=1716">[POJ 1716]Integer Intervals(差分约束系统) Integer Intervals Time Limit: 1000MS Memory L ...
- 【POJ 1201】 Intervals(差分约束系统)
[POJ 1201] Intervals(差分约束系统) 11 1716的升级版 把原本固定的边权改为不固定. Intervals Time Limit: 2000MS Memory Limit: ...
- POJ1201 Intervals(差分约束系统)
与ZOJ2770一个建模方式,前缀和当作点. 对于每个区间[a,b]有这么个条件,Sa-Sb-1>=c,然后我就那样连边WA了好几次. 后来偷看数据才想到这题还有两个隐藏的约束条件. 这题前缀和 ...
- POJ 2101 Intervals 差分约束
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 27746 Accepted: 10687 Description You ...
随机推荐
- 详谈java集合框架
1.为什么使用集合框架 当我们并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象——可以使用Java集合框架 2.Java集合框架包含的内容 接口:(父类)Collection接口下包含Li ...
- JDK升级
保存jboss运行时环境的配置 删除jboss下面的缓存文件 删除deployments里面的war包 重新build项目
- xadmin站点管理类
9. Xadmin xadmin是Django的第三方扩展,比使用Django的admin站点更强大也更方便. 文档:https://xadmin.readthedocs.io/en/latest/i ...
- JSON数据 与 JSON数据的使用
https://blog.csdn.net/u010378878/article/details/52943792 https://blog.csdn.net/liuxuan12417/article ...
- img、a标签的使用
<!doctype html><html><head><meta charset="utf-8"><title>无标题文 ...
- JSONP代码收藏
摘抄自jQuery,用于JSONP请求. var callback = 'callback_' + (new Date() - 0), url = 'http://localhost/', scrip ...
- Codeforces 918D/917B - MADMAX
传送门:http://codeforces.com/contest/918/problem/D 本题是一个组合游戏问题——DAG上的动态规划问题. 有一张有向无环图(DAG).有两个玩家在这张图上进行 ...
- Beetl学习总结(2)——基本用法
2.1. 安装 如果使用maven,使用如下坐标 <dependency> <groupId>com.ibeetl</groupId> <artifactId ...
- Java基础学习总结(71)——深入理解Java虚拟机内存
Java虚拟机中的内存分配图 : 各个区域的特性总结如下表: 补充说明: 当多线程情形下,可能多个线程要在堆上分配内存,那么可能出现内存分配的同步问题,解决方案有两个,一个就是同步内存分配动作:另一个 ...
- UVALIVE 6958 Indoorienteering
题目大意:有不超过14个点组成的完全图,给出邻接矩阵,问是否存在长度为W的欧拉回路? 数据范围:n<=14, w<=1e15: standard input/output 7 s, 256 ...