poj1201——Intervals(差分约束)
来源:互联网 发布:jquery 1.8.3.min.js 编辑:程序博客网 时间:2024/05/17 04:33
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
给出一些区间[a,b]和对应的数字c,表示要在区间内至少选c个数,求一共最少能选多少个数?
要转化成差分约束系统,设sa是[0,a]选出的数,则sb-sa<=c。
另外0<=S(i+1)-Si<=1,即i+1这个点取了或者没取,这样就有三条边了
#include <iostream>#include <cstring>#include <string>#include <vector>#include <queue>#include <cstdio>#include <set>#include <math.h>#include <algorithm>#include <queue>#include <iomanip>#include <map>#include <cctype>#define INF 0x3f3f3f3f#define MAXN 500005#define Mod 1000000007using namespace std;struct Edge{ int v,w,next;};Edge edge1[MAXN<<1];int head1[MAXN],n,m,e,vis[MAXN],dis[MAXN];int s,t;void add(Edge *edge,int *head,int u,int v,int w){ edge[e].v=v; edge[e].w=w; edge[e].next=head[u]; head[u]=e; e++;}void spfa(Edge *edge,int *head,int u){ memset(vis,0,sizeof(vis)); for(int i=s;i<=t;++i) dis[i]=-INF; dis[u]=0; queue<int> q; q.push(u); while(!q.empty()) { u=q.front(); q.pop(); vis[u]=0; for(int i=head[u];i!=-1;i=edge[i].next) { int v=edge[i].v,w=edge[i].w; if(w+dis[u]>dis[v]) { dis[v]=w+dis[u]; if(!vis[v]) { vis[v]=1; q.push(v); } } } }}int main(){ while(~scanf("%d",&m)) { e=0; memset(head1,-1,sizeof(head1)); s=INF; t=-INF; for(int i=0;i<m;++i) { int a,b,c; scanf("%d%d%d",&a,&b,&c); add(edge1,head1,a,b+1,c); //防止区间重叠 s=min(s,a); t=max(t,b+1); } for(int i=s;i<t;++i) { add(edge1,head1,i,i+1,0); add(edge1,head1,i+1,i,-1); } spfa(edge1,head1,s); printf("%d\n",dis[t]); } return 0;}
- poj1201——Intervals(差分约束)
- poj1201 Intervals(差分约束)
- [POJ1201]Intervals(差分约束)
- poj1201&&hdu1384 Intervals(差分约束)
- POJ1201-Intervals(差分约束)
- poj1201——Intervals//差分约束系统
- POJ1201--差分约束--Intervals
- POJ1201-Intervals(差分约束)
- Intervals poj1201(差分约束)
- (POJ1201)Intervals <差分约束系统-区间约束>
- POJ1201(Hdu1384) Intervals差分约束系统
- 【POJ1201】Intervals 差分约束系统
- POJ1201:Intervals(差分约束系统)
- POJ1201 Intervals [差分约束系统 SPFA]
- 【差分约束系统】Intervals POJ1201
- POJ1201 Intervals 【差分约束系统】
- poj1201 Intervals,差分约束问题,spfa
- POJ1201 HDU1384 Intervals【SPFA】【差分约束】
- poi导出excel用隐藏sheet方式封装下拉框(下拉选项值多的情况)
- java简单的实现RabbitMQ
- 对赌协议的经典案例分析
- 分布式系统原理
- sublime text插件的选择、安装和使用文章标题
- poj1201——Intervals(差分约束)
- jsp,css,js中变量的传递关系
- GirdLayout布局实现九宫格
- iOS之nib、xib及storyboard的区别
- 集合框架-Collection集合总结
- Oracle基础知识点(一)
- tomcat配置https
- Android:onNewIntent()触发机制及注意事项
- 新手指南: Linux 新手应该知道的 26 个命令