题目链接:

Intervals

Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 24379   Accepted: 9274

Description

You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn. 
Write a program that: 
reads the number of intervals, their end points and integers c1, ..., cn from the standard input, 
computes the minimal size of a set Z of integers which has at least ci common elements with interval [ai, bi], for each i=1,2,...,n, 
writes the answer to the standard output. 

Input

The first line of the input contains an integer n (1 <= n <= 50000) -- the number of intervals. The following n lines describe the intervals. The (i+1)-th line of the input contains three integers ai, bi and ci separated by single spaces and such that 0 <= ai <= bi <= 50000 and 1 <= ci <= bi - ai+1.

Output

The output contains exactly one integer equal to the minimal size of set Z sharing at least ci elements with interval [ai, bi], for each i=1,2,...,n.

Sample Input

5
3 7 3
8 10 3
6 8 1
1 3 1
10 11 1

Sample Output

6

题意:给一个区间[ai,bi],这个区间里有ci个相同的元素,问这个集合最少包含多少元素;

思路:

可以得到这样的几个不等式;c[i]<=dis[b+1]-dis[a];0<=dis[i+1]-dis[i];-1<=dis[i]-dis[i+1];题意是一定要满足这些条件,那么就是找最长路;当然也可以变成>=来建图,求最短路;

AC代码:
//最长路径的代码//#include <bits/stdc++.h>
#include <iostream>
#include <queue>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
#define Riep(n) for(int i=1;i<=n;i++)
#define Riop(n) for(int i=0;i<n;i++)
#define Rjep(n) for(int j=1;j<=n;j++)
#define Rjop(n) for(int j=0;j<n;j++)
#define mst(ss,b) memset(ss,b,sizeof(ss));
typedef long long LL;
const LL mod=1e9+7;
const double PI=acos(-1.0);
const int inf=0x3f3f3f3f;
const int N=5e4+5;
int n,head[3*N],vis[N],ans[N],cnt,mmin;
struct Edge
{int to,next,dis;
}edge[3*N];
queue<int>qu;
void spfa()
{mst(vis,0);mst(ans,-inf);ans[mmin]=0;qu.push(mmin);vis[mmin]=1;while(!qu.empty()){int fr=qu.front();qu.pop();for(int i=head[fr];i!=-1;i=edge[i].next){int x=edge[i].to;if(ans[x]<ans[fr]+edge[i].dis){ans[x]=ans[fr]+edge[i].dis;if(!vis[x]){qu.push(x);vis[x]=1;}}}vis[fr]=0;}
}
void add_edge(int s,int e,int val)
{edge[cnt].to=e;edge[cnt].next=head[s];edge[cnt].dis=val;head[s]=cnt++;
}
int main()
{while(scanf("%d",&n)!=EOF){int a,b,c,mmax=0;mmin=55000;cnt=0;mst(head,-1);Riep(n){scanf("%d%d%d",&a,&b,&c);mmax=max(mmax,b);mmin=min(mmin,a);add_edge(a,b+1,c);}Riep(mmax)add_edge(i,i+1,0),add_edge(i+1,i,-1);spfa();printf("%d\n",ans[mmax+1]);}return 0;
}

//最短路径的代码
//#include <bits/stdc++.h>
#include <iostream>
#include <queue>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
#define Riep(n) for(int i=1;i<=n;i++)
#define Riop(n) for(int i=0;i<n;i++)
#define Rjep(n) for(int j=1;j<=n;j++)
#define Rjop(n) for(int j=0;j<n;j++)
#define mst(ss,b) memset(ss,b,sizeof(ss));
typedef long long LL;
const LL mod=1e9+7;
const double PI=acos(-1.0);
const int inf=0x3f3f3f3f;
const int N=5e4+5;
int n,head[3*N],vis[N],ans[N],cnt,mmin,mmax;
struct Edge
{int to,next,dis;
}edge[3*N];
queue<int>qu;
void spfa()
{mst(vis,0);mst(ans,inf);ans[mmax]=0;qu.push(mmax);vis[mmax]=1;while(!qu.empty()){int fr=qu.front();qu.pop();for(int i=head[fr];i!=-1;i=edge[i].next){int x=edge[i].to;if(ans[x]>ans[fr]+edge[i].dis){ans[x]=ans[fr]+edge[i].dis;if(!vis[x]){qu.push(x);vis[x]=1;}}}vis[fr]=0;}
}
void add_edge(int s,int e,int val)
{edge[cnt].to=e;edge[cnt].next=head[s];edge[cnt].dis=val;head[s]=cnt++;
}
int main()
{while(scanf("%d",&n)!=EOF){int a,b,c;mmax=0;mmin=55000;cnt=0;mst(head,-1);Riep(n){scanf("%d%d%d",&a,&b,&c);mmax=max(mmax,b+1);mmin=min(mmin,a);add_edge(b+1,a,-c);}Riep(mmax)add_edge(i,i+1,1),add_edge(i+1,i,0);spfa();printf("%d\n",-ans[mmin]);}return 0;
}

转载于:https://www.cnblogs.com/zhangchengc919/p/5475999.html

poj-1201 Intervals(差分约束)相关推荐

  1. poj 1201 Intervals 差分约束

    真 .读题杀,英文题一脸懵逼,看来以后还要多读读英文题,不过读完了就能发现这其实是一道很裸的差分约束,按照题意建边即可,但还要注意的就是后一个要大于等于前一个,并且每个位置不能超过一个元素.求一边最大 ...

  2. POJ - 1201 Intervals(差分约束+最短路)

    题目链接:点击查看 题目大意:给定n个闭区间[ai,bi]和n个整数ci,你需要构造一个整数集合Z,使得Z中满足所有的ai<=x<=bi的整数不少于ci个,求出这样的整数集合Z最少包含多少 ...

  3. [poj 1364]King[差分约束详解(续篇)][超级源点][SPFA][Bellman-Ford]

    题意 有n个数的序列, 下标为[1.. N ], 限制条件为: 下标从 si 到 si+ni 的项求和 < 或 > ki. 一共有m个限制条件. 问是否存在满足条件的序列. 思路 转化为差 ...

  4. POJ 3159 Candies 差分约束dij

    分析:设每个人的糖果数量是a[i] 最终就是求a[n]-a[1]的最大值 然后给出m个关系 u,v,c 表示a[u]+c>=a[v] 就是a[v]-a[u]<=c 所以对于这种情况,按照u ...

  5. POJ 1201 Intervals (差分约束)

    POJ1716的变形,数据规模增大,用了循环数组. //9063355 NKHelloWorld 1201 Accepted 30788K 469MS C++ 1825B 2011-08-02 19: ...

  6. POJ 1716 Integer Intervals 差分约束

    题目:http://poj.org/problem?id=1716 1 #include <stdio.h> 2 #include <string.h> 3 #include ...

  7. O - Layout POJ - 3169(差分约束)

    O - Layout POJ - 3169 参考 思路: 限制条件 : 最大距离不超过w d[v] - d[u] <= w; 最小距离超过w d[v] - d[u] >= w; 移项得 d ...

  8. poj1201/zoj1508/hdu1384 Intervals(差分约束)

    转载请注明出处: http://www.cnblogs.com/fraud/           --by fraud Intervals Time Limit: 10 Seconds      Me ...

  9. POJ 1932 XYZZY (差分约束+传递闭包)

    题目链接 题意 有NNN个屋子,走进每个屋子血量都会发生改变,开始生命值100100100.问是否可以从111号屋子走到NNN号屋子中间血量保持大于000 思路 按照给定的顺序建图,因为要让血量尽可能 ...

最新文章

  1. AI 八数码A_star算法问题-实验报告
  2. ORA-00913错误:PL/SQL: ORA-00913: too many values
  3. 望城区构建摩托车电动车防盗系统 打造物联网平安智慧城市
  4. Leetcode-136. 只出现一次的数字(python3)
  5. python实例31[解析buildlog]
  6. [UWP]了解模板化控件(4):TemplatePart
  7. APP 代码提交GitHub: 提交、合并与冲突解决 (终端操作语法)
  8. Eclipse汉化教程
  9. 【工业互联网】一张图看清工业互联网发展史
  10. OpenGL FBO学习
  11. 包和工具(读书笔记)
  12. 当时的我很淘气openeim003
  13. 摘抄整理-20161115-程序员思维修炼
  14. 儿童护眼灯哪个品牌比较好?儿童台灯品牌排行榜
  15. 条件变量----condition_variable
  16. Echarts - 去掉图表横纵坐标轴刻度线(小细条分割线)
  17. Craps赌博游戏、百钱白鸡、七星彩选号、抓小偷、21根火柴、10000以内完美数
  18. python 培训课件
  19. 清华计算机科学与技术排名,2021清华大学王牌专业排名 清华最好的专业有哪些...
  20. 茅台市值超LV,在它的产业链地下,有着一个月赚300万的暴利链条

热门文章

  1. java画图颜色_手绘板,多种颜色选择。我抄的《疯狂java讲义》的,包我乱导的,但代码能用。...
  2. wpf ui框架_.NET跨平台框架Avalonia UI
  3. Java对象初始化详解
  4. img 标签 点击跳出图层_如何用PS在一个图层里画出一个会动的太极八卦图|教程...
  5. post工具_GitHub CLI 命令行工具使用
  6. 【算法】希尔排序 推导方法
  7. 【Elasticsearch】2021 年的顶级 ETL 工具......以及对 ETL 说“不”的理由
  8. 【Elasticsearch】Elasticsearch 中增加分片数量,聚合一定会变快吗?
  9. 02-neo4j的基本命令
  10. 【Mac】Mac 下安装MySQL优化工具mysqltuner执行报错 [!!] Attempted to use login credentials