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在初始化时需尽可能小,才能不断更新出最大值

  memset(dp,-,sizeof(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 差分方程分析的更多相关文章

  1. POJ 1201 &amp;&amp; HDU 1384 Intervals(差动制动系统)

    职务地址:POJ 1201   HDU 1384 依据题目意思.能够列出不等式例如以下: Sj-Si>=c; Si-S(i-1)>=0; S(i-1)-Si>=-1; 然后用最短路s ...

  2. poj 1201 Intervals 解题报告

    Intervals Time Limit: 2000MS   Memory Limit: 65536KB   64bit IO Format: %lld & %llu Submit Statu ...

  3. 【POJ 1201】 Intervals(差分约束系统)

    [POJ 1201] Intervals(差分约束系统) 11 1716的升级版 把原本固定的边权改为不固定. Intervals Time Limit: 2000MS   Memory Limit: ...

  4. POJ 1201 Intervals || POJ 1716 Integer Intervals 差分约束

    POJ 1201 http://poj.org/problem?id=1201 题目大意: 有一个序列,题目用n个整数组合 [ai,bi,ci]来描述它,[ai,bi,ci]表示在该序列中处于[ai, ...

  5. poj 1201 Intervals(差分约束)

    题目:http://poj.org/problem?id=1201 题意:给定n组数据,每组有ai,bi,ci,要求在区间[ai,bi]内至少找ci个数, 并使得找的数字组成的数组Z的长度最小. #i ...

  6. poj 1201 Intervals——差分约束裸题

    题目:http://poj.org/problem?id=1201 差分约束裸套路:前缀和 本题可以不把源点向每个点连一条0的边,可以直接把0点作为源点.这样会快许多! 可能是因为 i-1 向 i 都 ...

  7. POJ 1201 &amp; HDU1384 &amp; ZOJ 1508 Intervals(差分约束+spfa 求最长路径)

    题目链接: POJ:http://poj.org/problem?id=1201 HDU:http://acm.hdu.edu.cn/showproblem.php? pid=1384 ZOJ:htt ...

  8. 【38.24%】【POJ 1201】Intervals

    Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 25902 Accepted: 9905 Description You are ...

  9. POJ 1201 Intervals【差分约束】

    传送门:http://poj.org/problem?id=1201 题意: 有n个如下形式的条件:,表示在区间[, ]内至少要选择个整数点.问你满足以上所有条件,最少需要选多少个点? 思路:第一道差 ...

随机推荐

  1. java中的compareto方法以及LIst列表排序的详细介绍【转】

    java中的compareto方法的详细介绍 javacompareTo  java中的compareto方法,返回参与比较的前后两个字符串的asc码的差值,看下面一组代码 String a=&quo ...

  2. oracle 触发器,序列,索引

    oracle 触发器,序列,索引 --1,触发器 ----trigger /*触发器是一种特殊的存储过程,它与数据表紧密联系,用于保护表中的数据, 当一个定义了特定类型触发器的基表执行插入.修改或删除 ...

  3. Vue 2.0入门基础知识之全局API

    3.全局API 3-1. Vue.directive 自定义指令 Vue.directive用于自定义全局的指令 实例如下: <body> <div id="app&quo ...

  4. 人物丨让小三吐血,让原配泣血——24K渣男郎咸平

    http://url.cn/5swgmythttps://www.toutiao.com/i6650650793743483395人物丨让小三吐血,让原配泣血——24K渣男郎咸平 人物丨让小三吐血,让 ...

  5. java读取大文件 超大文件的几种方法

    java 读取一个巨大的文本文件既能保证内存不溢出又能保证性能       import java.io.BufferedReader; import java.io.File; import jav ...

  6. 51nod 1417 天堂里的游戏

    基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 多年后,每当Noder看到吉普赛人,就会想起那个遥远的下午. Noder躺在草地上漫无目的的张望,二 ...

  7. android studio更新后,构建gradle卡在Refreshing Gradle Project 解决办法

    Android Studio每次更新版本都会更新Gradle这个插件,但由于墙的问题,导致更新很慢或者最后更新失败,又是停止在Refreshing Gradle Project ,有时新建项目的时候报 ...

  8. eject - 弹出可移动介质

    SYNOPSIS(总览) eject -h.breject [-vnrsfq] [<name>] eject [-vn] -d.breject [-vn] -a on|off|1|0 [& ...

  9. uva10570 Meeting with Aliens

    先证明把每次i放到i位置最后次数最少:感觉,可以,用归纳法? //在序列后再加一个相同的序列,就可以模拟用各个数字开头的情况了每个位置不对的只需要换一次54123 ,5固定->41235变成12 ...

  10. java web开发中常用的协议的使用和java-web 常见的缓冲技术

    一.DNS协议 作用将域名解析为IP   类似于我们只需要知道中央一台,中央二台,而不需要知道它的频率,方便记忆. java dns 域名解析协议实现 1 域名解析,将域名可转换为ip地址InetAd ...