【POJ1021】Intervals (最短路解差分约束)
题目:
Sample Input
5 3 7 3 8 10 3 6 8 1 1 3 1 10 11 1
Sample Output
6
题意:
我们选数,每个数只能选一次。给定n个条件[ai,bi]和ci,表示区间[ai,bi]中至少选ci个数,问一共最少选多少个数。
分析:
设xi为小于等于i的数中选了多少个数。对于条件[ai,bi]、ci,我们有bi-ai-1>=ci,是差分约束系统,可以用最短路求解。
另外,题目中有比较隐蔽的条件:每个数只能选一个,一个数选的次数也不能为负,那么就是说对于相邻的两个数x、y,有0<=y-x<=1,要根据这个条件建边才能保证答案无误。
最后输出Xmx-Xmn。(差分约束系统要不无解,要不有无数解,因为一旦有解只要保证他们之间差值不变即可。题目问一共最少选多少个数,而xi的最小值为0,所以答案为Xmx-Xmn)
代码如下:
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 #include<algorithm> 6 #include<queue> 7 using namespace std; 8 #define Maxn 50010 9 #define INF 0xfffffff 10 11 struct node 12 { 13 int x,y,c,next; 14 }t[Maxn*4];int len=0; 15 16 int first[Maxn],cnt[Maxn],dis[Maxn]; 17 bool bq[Maxn],inq[Maxn]; 18 19 int mymin(int x,int y) {return x<y?x:y;} 20 int mymax(int x,int y) {return x>y?x:y;} 21 22 void ins(int x,int y,int c) 23 { 24 t[++len].x=x;t[len].y=y;t[len].c=c; 25 t[len].next=first[x];first[x]=len; 26 } 27 28 queue<int > q; 29 30 void spfa(int s) 31 { 32 memset(dis,63,sizeof(dis)); 33 memset(inq,0,sizeof(inq)); 34 memset(cnt,0,sizeof(cnt)); 35 if(!q.empty()) q.pop(); 36 dis[s]=0;inq[s]=1;q.push(s); 37 while(!q.empty()) 38 { 39 int x=q.front();q.pop();inq[x]=0; 40 for(int i=first[x];i;i=t[i].next) 41 { 42 int y=t[i].y; 43 if(dis[y]>dis[x]+t[i].c) 44 { 45 dis[y]=dis[x]+t[i].c; 46 if(!inq[y]) 47 { 48 q.push(y); 49 inq[y]=1; 50 } 51 } 52 } 53 } 54 } 55 56 int main() 57 { 58 int m,mx=0,mn=INF; 59 scanf("%d",&m); 60 memset(first,0,sizeof(first)); 61 memset(bq,0,sizeof(bq)); 62 for(int i=1;i<=m;i++) 63 { 64 int x,y,c; 65 scanf("%d%d%d",&x,&y,&c);x++;y++; 66 ins(y,x-1,-c); 67 bq[x]=bq[y]=1; 68 mx=mymax(mx,y);mn=mymin(mn,x-1); 69 } 70 for(int i=mn;i<mx;i++) ins(i+1,i,0); 71 for(int i=mn;i<mx;i++) ins(i,i+1,1); 72 for(int i=mn;i<=mx;i++) ins(mx+1,i,0); 73 spfa(mx+1); 74 //for(int i=mn;i<=mx;i++) printf("%d %d\n",i,dis[i]); 75 printf("%d\n",dis[mx]-dis[mn]); 76 return 0; 77 }
[POJ1201]
感觉自己考虑问题总是不全面啊。
2016-04-10 16:31:30
转载于:https://www.cnblogs.com/Konjakmoyu/p/5374459.html
【POJ1021】Intervals (最短路解差分约束)相关推荐
- POJ1201/ZOJ1508/HDU1384 Intervals(spfa解差分约束问题)
题意是说给出一些闭区间,这些区间上整点可以选择放一个元素或者不放,但是每个区间都有一个下限,就是说你在这个区间里面的元素个数不能低于这个下限值. 最后要求出最少需要几个元素才能满足每个区间的要求. 建 ...
- 【UVA11478】Halum (最短路解差分约束)
题目: Sample Input 2 1 1 2 10 2 1 1 2 -10 3 3 1 2 4 2 3 2 3 1 5 4 5 2 3 4 4 2 5 3 4 2 3 1 0 1 2 -1 Sam ...
- POJ3169 Layout , 最短路算法解差分约束问题
POJ3169 Layout 题意: n头牛编号为1到n,按照编号的顺序排成一列,每两头牛的之间的距离 >= 0.这些牛的距离存在着一些约束关系:1.有ml组(u, v, w)的约束关系,表示牛 ...
- POJ - 3169 SPFA解差分约束除了有解,负环还有另一种情况
题意就是有N头牛排成一个直线..有些牛之间互相讨厌..距离必须大于等于某个...有些牛之间相互暧昧..距离必须小于等于某个...牛的前后顺序和编号是一样的...问这些牛最多能排多长.. 比较传统的SP ...
- 算法提高课-图论-差分约束- AcWing 1169. 糖果:spfa求单源最短路、差分约束
文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 差分约束系统 差分约束系统是一种特殊的N元一次不等式组.它包含N个变量X1,...,XnX_1,...,X_nX1,...,Xn ...
- UVA 11478 Halum(用bellman-ford解差分约束)
对于一个有向带权图,进行一种操作(v,d),对以点v为终点的边的权值-d,对以点v为起点的边的权值+d.现在给出一个有向带权图,为能否经过一系列的(v,d)操作使图上的每一条边的权值为正,若能,求最小 ...
- 谈SPFA解差分约束最大值最小值的原理...
自我分析,为什么用SPFA解差分方程,用最短路径求差分方程的最大解:用最长路径求差分方程的最小解. 如果给出的是一组: a2 - a1 <= k1 a3 - a1 <= k2 .... 之 ...
- CSP认证201809-4 再卖菜[C++题解]:差分约束、前缀和
文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 对于a0,a1,...,ana_0, a_1,...,a_na0,a1,...,an,经过计算相邻的数的平均值得到b0,b1, ...
- 差分约束 1:pku 1201 Intervals 2:pku 1364 King 3:hdu 1534
一个很好的差分约束总结:http://972169909-qq-com.iteye.com/blog/1185527 第一: 感觉难点在于建图 第二: ①:对于差分不等式,a - b <= ...
最新文章
- maven打包记录1
- 谈一谈使用Python入门量化投资
- 计算机考研最后四十天,2021考研最后四十天冲刺复习攻略
- 【计算机网络(微课版)】第2章 物理层 课后习题及答案
- Matlab | MATLAB编辑器:无法使用GBK编码保存文件,请改用UTF-8编码保存文件(问题解决)
- Android注解学习(2)
- 洛谷——P1478 陶陶摘苹果(升级版)
- 2005年3月9日笔记
- asp.net处理get,post数据
- 微软推出 Power Platform 漏洞奖励计划
- verilog 简单module_verilog简易教程
- 计算机系统的基础必备软件,电脑必装软件推荐:基础篇——够用就行
- 你也可以找到好工作(二)
- 9_python笔记-函数
- #Paper Reading# Efficient Heterogeneous Collaborative Filtering without NS for Recommendation
- 1.centos7 安装murmur
- nodejs __dirname 与 process.cwd(); 的区别
- Unity* 原生 X86 支持使Square Enix的Hitman GO*卓尔不凡
- oracle启动监听程序报错:本地计算机上的oracleOraDB11g_home1TNSListener服务启动后停止某些服务在未由其他服务或程序使用时将自动停止
- 爱因斯坦的超级问题(谁养鱼)SQL解法
热门文章
- 【微信小程序】图片选择、转码、压缩、预览、上传,file与base64
- 解决Error: Assertion failed (chunk.m_size <= 0xFFFF)和Set OPENCV_ENABLE_NONFREE CMake option问题
- 【ABAQUS2022】ABAQUS2022安装+汉化+帮助文档下载教程
- GLTF格式学习:glTF介绍( 基于WebGL
- 网络攻防实验:defcon2015 r0pbab
- 车载网络测试 - 车载以太网 - ARP详细解析
- 详讲全排列算法,及解决数字搭积木问题
- 【HTML】Angular JS + Table 根据数据动态合并单元格
- IDEA中maven项目的language level 修改后自动重置问题
- 发那科机器人没有码垛指令_FANUC 机器人码垛编程详细讲解