【差分约束系统】【最短路】【spfa】CDOJ1646 穷且益坚, 不坠青云之志。
求一个有n个元素的数列,满足任意连续p个数的和不小于s, 任意连续q个数的和不大于t。
令sum[i]表示前i项的和(0<=i<=n,sum[0]=0) 那么题目的条件可转化为: sum[i]-sum[i-p]>=s (p<=i<=n) sum[i]-sum[i-q]<=t (q<=i<=n) 将第一个不等式取反,得到 sum[i-p]-sum[i]<=-s(p<=i<=n)
于是问题转化为求一系列不等式的解,这是一个典型的差分约束问题。 考虑最短路径的性质,令dis[i]表示从s到i的最短路,则对于图中存在的一条边(u,v),有 dis[v]<=dis[u]+w(u,v),即dis[v]-dis[u]<=w(u,v); 类比不等式,于是可建图,i向i-p引长度为-s的边,i-q向i引长度为t的边。 然后运行bellmanford,如果存在负环,则无解, 否则所得到的最短路的值就是sum[i]的一个解。 时间复杂度:O(VE) 具体原理及证明见《算法导论》P387
注意这里只需要求出可行解,故而建立一个虚拟结点的方法是可行的。
- #include<cstdio>
- #include<queue>
- #include<cstring>
- using namespace std;
- int n,p,q,K1,K2;
- queue<int>Q;
- bool inq[510];
- int dis[510],sumv[510];
- int v[510*3],__next[510*3],e,w[510*3],first[510],cnts[510];
- void AddEdge(int U,int V,int W){
- v[++e]=V;
- w[e]=W;
- __next[e]=first[U];
- first[U]=e;
- }
- bool spfa(const int &s)
- {
- memset(dis,0x7f,sizeof(dis));
- dis[s]=0; Q.push(s); inq[s]=1; ++cnts[s];
- while(!Q.empty())
- {
- int U=Q.front();
- for(int i=first[U];i;i=__next[i])
- if(dis[v[i]]>dis[U]+w[i])
- {
- dis[v[i]]=dis[U]+w[i];
- if(!inq[v[i]])
- {
- Q.push(v[i]);
- inq[v[i]]=1;
- ++cnts[v[i]];
- if(cnts[v[i]]>n+1)
- return 0;
- }
- }
- Q.pop(); inq[U]=0;
- }
- return 1;
- }
- int main(){
- scanf("%d%d%d%d%d",&n,&p,&q,&K1,&K2);
- for(int i=0;i+p<=n;++i){
- AddEdge(p+i,i,-K1);
- }
- for(int i=0;i+q<=n;++i){
- AddEdge(i,q+i,K2);
- }
- for(int i=0;i<=n;++i){
- AddEdge(n+1,i,0);
- }
- if(!spfa(n+1)){
- puts("No");
- return 0;
- }
- puts("Yes");
- for(int i=1;i<=n;++i){
- sumv[i]=dis[i]-dis[0];
- }
- for(int i=1;i<n;++i){
- printf("%d ",sumv[i]-sumv[i-1]);
- }
- printf("%d\n",sumv[n]-sumv[n-1]);
- return 0;
- }
【差分约束系统】【最短路】【spfa】CDOJ1646 穷且益坚, 不坠青云之志。的更多相关文章
- Layout---poj3169(差分约束+最短路spfa)
题目链接:http://poj.org/problem?id=3169 有n头牛站成一排 在他们之间有一些牛的关系比较好,所以彼此之间的距离不超过一定距离:也有一些关系不好的牛,希望彼此之间的距离大于 ...
- [BZOJ2330][SCOI2011]糖果 差分约束系统+最短路
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2330 类似于题目中这种含有不等式关系,我们可以建立差分约束系统来跑最长路或最短路. 对于一 ...
- 【差分约束系统】【spfa】UVALive - 4885 - Task
差分约束系统讲解看这里:http://blog.csdn.net/xuezhongfenfei/article/details/8685313 模板题,不多说.要注意的一点是!!!对于带有within ...
- 【差分约束系统/DFS版SPFA】BZOJ3436-小K的农场
[题目大意] 总共n个农场,有以下三种描述:农场a比农场b至少多种植了c个单位的作物,农场a比农场b至多多种植了c个单位的作物,农场a与农场b种植的作物数一样多.问是否有可能性. [思路] 农场a比农 ...
- 【POJ 1716】Integer Intervals(差分约束系统)
id=1716">[POJ 1716]Integer Intervals(差分约束系统) Integer Intervals Time Limit: 1000MS Memory L ...
- 【POJ 1201】 Intervals(差分约束系统)
[POJ 1201] Intervals(差分约束系统) 11 1716的升级版 把原本固定的边权改为不固定. Intervals Time Limit: 2000MS Memory Limit: ...
- UVA 11374 Halum (差分约束系统,最短路)
题意:给定一个带权有向图,每次你可以选择一个结点v 和整数d ,把所有以v为终点的边权值减少d,把所有以v为起点的边权值增加d,最后要让所有的边权值为正,且尽量大.若无解,输出结果.若可无限大,输出结 ...
- POJ 3159 Candies (图论,差分约束系统,最短路)
POJ 3159 Candies (图论,差分约束系统,最短路) Description During the kindergarten days, flymouse was the monitor ...
- spfa+差分约束系统(C - House Man HDU - 3440 )+对差分约束系统的初步理解
题目链接:https://cn.vjudge.net/contest/276233#problem/C 题目大意:有n层楼,给你每个楼的高度,和这个人单次的最大跳跃距离m,两个楼之间的距离最小是1,但 ...
- 差分约束系统 + spfa(A - Layout POJ - 3169)
题目链接:https://cn.vjudge.net/contest/276233#problem/A 差分约束系统,假设当前有三个不等式 x- y <=t1 y-z<=t2 x-z< ...
随机推荐
- CentOS7修改默认运行级别
新装了一个虚拟机,图形界面启动太慢,想调整一下按照以前的经验改运行级别,输入: vi /etc/inittab 然后发现跟之前不一样了,在inittab设置不再生效: # inittab is no ...
- java和C和C++关系
java和C以及C++ 直接关联,java继承了C的语法,java的对象模型是从C++改编而来的.java和C以及C++关系之所以重要,下面几个就是原因: ①如果一个程序员熟悉C以及C++语法,那么他 ...
- 今天安装了arch,感觉不错,这速度可以
虽然没有想想中的那么那么快,不过已经可以了 总结一下遇到的问题以及i自己安装的软件 1.u盘硬盘不能自动挂载 安装gvfs 2.不能读写挂载 安装ntfs-3g 3.时间不对 照wiki上的说 #ln ...
- win10远程桌面配置
Win10连接远程桌面的时候提示您的凭证不工作该怎么办? http://www.cnblogs.com/zhuimengle/p/6048128.html 二.服务器端 1.依旧进入组策略,不过是在服 ...
- Meld:文件及目录对比工具
Meld:文件及目录对比工具 http://wowubuntu.com/meld.html http://meld.sourceforge.net/
- 004 ConcurrentHashMap原理
下面这部分内容转载自: http://www.haogongju.net/art/2350374 JDK5中添加了新的concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为 ...
- JAVA常见的集合类
关系的介绍: Set(集):集合中的元素不按特定方式排序,并且没有重复对象.他的有些实现类能对集合中的对象按特定方式排序. List(列表):集合中的元素按索引位置排序,可以有重复对象,允许按照对象在 ...
- make :err Makefile.ssl is older than Makefile.org. Reconfigure the source tree (via './config' or 'perl Configure'), please.
内核编译时出现错误 Makefile.ssl is older than Makefile.org. Reconfigure the source tree (via './config' or 'p ...
- 爬虫基础库之requests
requests Python标准库中提供了:urllib.urllib2.httplib等模块以供Http请求,但是,它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作, ...
- Qt精简编译方法总结
原文请看:http://blog.csdn.net/loaden/article/details/6061702 Qt如果采取默认编译安装,一般都要占用上G的空间.当初自己不想涉及Qt的一个原因,就是 ...