POJ 1201 差分方程分析
POJ 1201
给你N个闭区间。每个区间分别为[ai,bi],你必须在这个区间上至少取ci个不同的整数。
现要求所有区间满足各自的条件。
问最少需要选多少个点。
例如[3,7](3) [8,10](3) [6,8](1) [1,3](1) [10,11](1)
我们最少需要选6个点:
3 4 6 8 9 10
在这里我们可以看成是dp[7]-dp[2]>=3 dp[10]-dp[8]>=3 ....
这就可以理解为2->7的距离可以定为3,8->10的距离也定为3
我们再看看Si的定义,也不难写出0<=Si - Si-1<=1的限制条件,虽然看上去是没有什么意义的条件,但是如果你也把它构造出一系列的边的话,这样从起点到终点的最短路也就顺理成章的出现了。
我们将上面的限制条件写为同意的形式:
Sbi - Sai >= ci
Si - Si-1 >= 0
Si-1 - Si >= -1
这样子我们相当于在一个构建好的有向图中找一个最长路径,这跟之前的最短路径正好相反,所以需要引起注意
那么dp在初始化时需尽可能小,才能不断更新出最大值
for(int i=first[u];i!=-;i=area[i].next){
if(dp[area[i].y]<dp[u]+area[i].d){
dp[area[i].y]=dp[u]+area[i].d;
if(!visit[area[i].y])
visit[area[i].y]=,q.push(area[i].y);
}
所以这里要引起注意,要在小于的情况下继续执行程序,不断更新出最大值。
对于一个差分问题来说是可能存在无解的情况的,那说明形成的是负圈,但这道题目明显表示有解,所以无需进行负圈的判断。
总代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cmath>
using namespace std;
#define N 50005
#define M 200000 int visit[N],dp[N],first[N],k,n,m,maxn,minn; struct Area{
int y,next,d;
}area[M]; void init()
{
k=,maxn=,minn=N;
memset(first,-,sizeof(first));
} void add(int a,int b,int c){
area[k].y=b,area[k].d=c,area[k].next=first[a];
first[a]=k;
k++;
} void spfa()
{
memset(visit,,sizeof(visit));
queue<int> q;
memset(dp,-,sizeof(dp));
dp[minn]=,visit[minn]=,q.push(minn);
while(!q.empty()){
int u=q.front();
q.pop();
visit[u]=;
for(int i=first[u];i!=-;i=area[i].next){
if(dp[area[i].y]<dp[u]+area[i].d){
dp[area[i].y]=dp[u]+area[i].d;
if(!visit[area[i].y])
visit[area[i].y]=,q.push(area[i].y);
}
}
}
} int main()
{
int a,b,c;
while(scanf("%d",&n)!=EOF){
init();
for(int i=;i<n;i++)
{
scanf("%d%d%d",&a,&b,&c);
//add(b,a-1,-c);
add(a,b+,c);
maxn=max(maxn,b+);
minn=min(minn,a);
}
for(int i=minn;i<maxn;i++){
add(i,i+,);
add(i+,i,-);
}
spfa(); printf("%d\n",dp[maxn]);
}
return ;
}
POJ 1201 差分方程分析的更多相关文章
- POJ 1201 && HDU 1384 Intervals(差动制动系统)
职务地址:POJ 1201 HDU 1384 依据题目意思.能够列出不等式例如以下: Sj-Si>=c; Si-S(i-1)>=0; S(i-1)-Si>=-1; 然后用最短路s ...
- poj 1201 Intervals 解题报告
Intervals Time Limit: 2000MS Memory Limit: 65536KB 64bit IO Format: %lld & %llu Submit Statu ...
- 【POJ 1201】 Intervals(差分约束系统)
[POJ 1201] Intervals(差分约束系统) 11 1716的升级版 把原本固定的边权改为不固定. Intervals Time Limit: 2000MS Memory Limit: ...
- POJ 1201 Intervals || POJ 1716 Integer Intervals 差分约束
POJ 1201 http://poj.org/problem?id=1201 题目大意: 有一个序列,题目用n个整数组合 [ai,bi,ci]来描述它,[ai,bi,ci]表示在该序列中处于[ai, ...
- poj 1201 Intervals(差分约束)
题目:http://poj.org/problem?id=1201 题意:给定n组数据,每组有ai,bi,ci,要求在区间[ai,bi]内至少找ci个数, 并使得找的数字组成的数组Z的长度最小. #i ...
- poj 1201 Intervals——差分约束裸题
题目:http://poj.org/problem?id=1201 差分约束裸套路:前缀和 本题可以不把源点向每个点连一条0的边,可以直接把0点作为源点.这样会快许多! 可能是因为 i-1 向 i 都 ...
- POJ 1201 & HDU1384 & ZOJ 1508 Intervals(差分约束+spfa 求最长路径)
题目链接: POJ:http://poj.org/problem?id=1201 HDU:http://acm.hdu.edu.cn/showproblem.php? pid=1384 ZOJ:htt ...
- 【38.24%】【POJ 1201】Intervals
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 25902 Accepted: 9905 Description You are ...
- POJ 1201 Intervals【差分约束】
传送门:http://poj.org/problem?id=1201 题意: 有n个如下形式的条件:,表示在区间[, ]内至少要选择个整数点.问你满足以上所有条件,最少需要选多少个点? 思路:第一道差 ...
随机推荐
- AJPFX关于Swing组件的总结
默认布局管理器是流式布局(FlowLayout) 按钮的建立: jb1=new JButton("香蕉") 面板的建立:jp1=new JPanel(); 设置JFrame的标题: ...
- 杨辉三角python的最佳实现方式,牛的不能再牛了
def triangles(): N = [1] while True: yield N N.append(0) N = [N[i-1] + N[i] for i in range(len(N))] ...
- OCP 11g 第一章练习
练习 1-1 研究所在环境的DBMS 这是一个书面练习,没有具体的解决方案. 确定自己所在环境使用的应用程序, 应用服务器 , 和数据库. 然后集中精力研究数据库, 体验一下数据库的规模和忙碌程度. ...
- mac上的应用提权
一个mac上的app需要在/Applications/My.app/Contents/MacOS路径下创建一个配置文件,在开启root权限的账户下运行时ok,但是在没有开启root权限的账户下运行时, ...
- droplang - 删除一种 PostgreSQL 过程语言
SYNOPSIS droplang [ connection-option...] langname [ dbname] droplang [ connection-option...] --list ...
- 基础数据类型(set集合)
认识集合 由一个或多个确定的元素所构成的整体叫做集合. 集合中的元素有三个特征: 1.确定性(集合中的元素必须是确定的) 2.互异性(集合中的元素互不相同.例如:集合A={1,a},则a不能等于1) ...
- Day01:我的Python学习之路
1.Python是什么语言? Python是动态的解释性的强类型定义的语言. (1)动态语言与静态语言 ①静态语言:在编译期间就会去做数据类型检查的语言,如C,C++. ②动态语言:在运行期间才会去做 ...
- [LUOGU] P2187 小Z的笔记
看范围猜方程,应该是O(n)级别的 f[i]表示前i个合法的最小代价,转移需要枚举断点位置,O(n^2) f[i]表示前i个合法留下的最大个数,同时更新距离最近的26个字母的位置,O(n)转移 f[i ...
- <a>标签的href 与 onclick 使用
链接的onclick 事件被先执行,其次是href属性下的动作(页面跳转,或 javascript 伪链接): 假设链接中同时存在href 与onclick,如果想让href 属性下的动作不执行,on ...
- 6. COLUMN_PRIVILEGES
6. COLUMN_PRIVILEGES 表COLUMN_PRIVILEGES提供有关列权限的信息.它从mysql.columns_priv系统表中获取其值 . 表COLUMN_PRIVILEGES包 ...