poj1201 Intervals
来源:互联网 发布:类似天下游的软件 编辑:程序博客网 时间:2024/06/09 16:20
题目大意:
给你N个区间,[a,b]要求你在每个区间内至少找C个数,要求你求出一个集合,集合内的数包含所有满足条件的区间内的数,输出这个集合内的元素的个数即可。
解题思路:
利用差分约束的思想,构造不等式组:
a-(b+1)<=-c
i-1-i<=0;
i-(i-1)<=1;
代码:
#include<stdio.h>#include<queue>using namespace std;const int inf = 1<<30;const int N = 50010;struct node{ int to; int dis; int next;};node edg[N*4];int head[N],h;void add(int a,int b,int d){ edg[h].to=b; edg[h].dis=d; edg[h].next=head[a]; head[a]=h; h++;}int dis[N];bool in_q[N];void spfa(int st,int ed){ queue<int> q; q.push(st); dis[st]=0; in_q[st]=true; int v,k,cur; while(!q.empty()) { v=q.front();// if(v==ed)// return ; q.pop(); in_q[v]=false; for(k=head[v];k!=-1;k=edg[k].next) {// puts("**"); cur=edg[k].to; if(dis[cur]>dis[v]+edg[k].dis) { dis[cur]=dis[v]+edg[k].dis; if(!in_q[cur]) { q.push(cur); in_q[cur]=true; } } } }}void init(){ int i; for(i=0;i<N;i++) { head[i]=-1; dis[i]=inf; in_q[i]=false; } h=0;}int main(){ int n; int a,b,d; int i,st,ed; while(scanf("%d",&n)!=EOF) { init(); st=inf; ed=-inf; for(i=0;i<n;i++){ scanf("%d%d%d",&a,&b,&d); add(a,b+1,-d); st=a<st?a:st; ed=ed>(b+1)?ed:(b+1); } for(i=ed;i>st;i--) { add(i-1,i,0); add(i,i-1,1); } spfa(st,ed); printf("%d\n",-dis[ed]); }}
0 0
- poj1201 Intervals
- poj1201 - Intervals
- poj1201 Intervals
- poj1201 Intervals
- POJ1201 Intervals
- poj1201 Intervals
- poj1201 intervals
- poj1201 Intervals
- 【poj1201】 Intervals
- POJ1201 Intervals
- POJ1201[Intervals]
- 【poj1201】Intervals
- POJ1201 Intervals
- ZOJ1508 POJ1201 HDU1384 Intervals
- POJ1201--差分约束--Intervals
- POJ1201-Intervals(差分约束)
- 解题报告 之 POJ1201 Intervals
- Intervals poj1201(差分约束)
- java内存管理机制
- [Debug]打印log相关
- 暑假php学习记录(2)
- 当前之后n 天日期
- DHCP+NAT+IP隧道
- poj1201 Intervals
- Spring MVC过滤器-登录过滤
- android:versionCode和android:versionName 用途
- CSS animations 和 transitions的性能问题
- PhoneGap优化解决方案(续)
- Android 监听截屏获取图像
- 测试工作总遇到的问题
- 期待筷子兄弟“小苹果”的背后
- SpringMVC上传文件demo