poj-1201 Intervals
2016-01-27 20:25
295 查看
题意:给定n个整数闭区间[ai,bi]和n个整数c1-cn,求一个最小的整数集合Z,使得Z里面的数中范围在闭区间[ai,bi]的个数不小于ci个。
思路:首先我们可以知道在ai到bi区间内整数的个数为S[bi]-S[ai-1](S[i]为从0到I的所有整数个数)我们可以得到约束条件,S[bi]-S[ai-1]>=ci可转换为S[ai-1]-S[bi]<=-ci。
其实还有两个隐藏的条件
1)S[i]-S[i-1]<=1两个相邻的S之间差距不会大于1。
2)S[i-1]-S[i]<=0
之后我们只需要由bi向ai连接一个权值为-ci的有向边来建图,由于有3个约束条件,我们需要改造一下bellman-ford的算法
从0-n-1当dis[v]>dis[u]+w时松弛 从min数值到max数值,如果dis[i]>dis[i-1]+1则松弛 从max到min如果dis[i-1]>dis[i]则松弛
思路:首先我们可以知道在ai到bi区间内整数的个数为S[bi]-S[ai-1](S[i]为从0到I的所有整数个数)我们可以得到约束条件,S[bi]-S[ai-1]>=ci可转换为S[ai-1]-S[bi]<=-ci。
其实还有两个隐藏的条件
1)S[i]-S[i-1]<=1两个相邻的S之间差距不会大于1。
2)S[i-1]-S[i]<=0
之后我们只需要由bi向ai连接一个权值为-ci的有向边来建图,由于有3个约束条件,我们需要改造一下bellman-ford的算法
从0-n-1当dis[v]>dis[u]+w时松弛 从min数值到max数值,如果dis[i]>dis[i-1]+1则松弛 从max到min如果dis[i-1]>dis[i]则松弛
#include <iostream> #include <algorithm> #include <cstdlib> #include <cstring> #include <cstdio> #include <cmath> #include <queue> #define INF 0x3f3f3f3f #define mod 100000000 using namespace std; struct node { int u,v,w; }s[51000]; int maxn,minn,n; int dis[51000]; void bellman() { for(int i=0;i<n;i++) { dis[i]=INF; } dis[maxn]=0; int flag=1; while(flag) { flag=0; for(int i=0;i<n;i++) { if(dis[s[i].v]>dis[s[i].u]+s[i].w){ dis[s[i].v]=dis[s[i].u]+s[i].w; flag=1; } } for(int i=minn;i<=maxn;i++) { if(dis[i]>dis[i-1]+1){ dis[i]=dis[i-1]+1; flag=1; } } for(int i=maxn;i>=minn;i--) { if(dis[i-1]>dis[i]) { dis[i-1]=dis[i]; flag=1; } } } } int main() { int u,v,w; while(scanf("%d",&n)!=EOF) { maxn=0; minn=INF; for(int i=0;i<n;i++) { scanf("%d%d%d",&u,&v,&w); s[i].u=v; s[i].v=u-1; s[i].w=-w; if(maxn<v) maxn=v; if(minn>u) minn=u; } bellman(); printf("%d\n",-dis[minn-1]); } return 0; }
相关文章推荐
- 2016/01/27 Head First Java 第一节小结
- 【Web前端】:JavaScript操作Cookie实现“历史搜索”
- Divide and conquer:Garland(POJ 1759)
- CSS定位absolute和relative
- spark load file的几种方式
- Fedora21修改jdk为1.7版并安装Eclipse
- 在Windows上安装MongoDB
- Coursera课程《大家的python》(Python for everyone)课件
- qcow2、raw、vmdk等镜像格式
- hdu 1800 Flying to the Mars 字典树
- 《Boost程序完全开发指南》
- [iOS]iPhone利用<极光推送>实现远程推送
- OC加强day04-NSString、array、增强for、block、.h中协议的声明
- 【HNOI2008】【BZOJ1008】越狱
- qemu-kvm virtio 虚拟化-----Linux客户机 virtio设备初始化
- QT信号槽连接
- moment.js 添加中文语言(汉化)
- 如何将Oracle数据库中的数据导入到hbase中 使用 Sqoop工具
- MAC 安装 Android studio 教程
- HDU 1233 - 还是畅通工程