题意:两栋房子之间的最大距离为D,也就是A-B<=D,现在求出最矮和最高房子之间的最大距离
思路:差分约束+SPFA算法:
当问题可以转化为形如一组 xi‑x’i<=yi 或一组 xi‑x’i>=yi ,求任一满足的可行解的问题时,可以将其转化为最短路/最长路问题。
约束条件:

A-B<=D
A-B>=1

条件转化一下:

A-B<=D
B-A<=-1

主义SPFA判断负环的情况:
判断有⽆负环:如果某个点进⼊队列的次数超过 N 次则存在负环(SPFA ⽆法处理带负环的图)所以不满足条件,输出-1.

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<cstdio>
using namespace std;
const int maxx=10005;
const int inf=0x3f3f3f3f;
int dist[maxx];
int vis[maxx];
int nums[maxx];
vector<int>G[maxx];
int n,d,k;
int head[maxx];
struct W{int id;int w;
}num[maxx];
int cmp(W a,W b){return a.w>b.w;
}
struct node{int u,v;int next;int w;
}e[maxx<<2];
int cnt;
queue<int>q;
void init(){cnt=0;memset(dist,inf ,sizeof(dist));memset(nums,0,sizeof(nums));memset(vis,0,sizeof(vis));memset(head,-1,sizeof(head));while(!q.empty())q.pop();
}
void add(int u,int v,int w){e[cnt].u=u;e[cnt].v=v;e[cnt].w=w;e[cnt].next=head[u];head[u]=cnt++;
}
int SPFA(int s,int t){dist[s]=0;vis[s]=1;q.push(s);while(!q.empty()){int u=q.front();q.pop();vis[u]=0;for(int i=head[u];i!=-1;i=e[i].next){int v=e[i].v;if(dist[v]>dist[u]+e[i].w){dist[v]=dist[u]+e[i].w;if(vis[v]==0){nums[v]++;q.push(v);vis[v]=1;if(nums[v]>n){return false;}}}}}return true;
}
int main(){int t;scanf("%d",&t);int count=1;while(t--){printf("Case %d: ",count++);scanf("%d %d",&n,&d);init();for(int i=1;i<=n;i++){scanf("%d",&num[i].w);num[i].id=i;}sort(num+1,num+n+1,cmp);int s,t;//最短和最高的房子之间的最大距离 ,注意编号问题 s=max(num[1].id,num[n].id);t=min(num[1].id,num[n].id);for(int i=1;i<n;i++){int u=max(num[i].id,num[i+1].id);int v=min(num[i].id,num[i+1].id);add(u,v,d);}for(int i=1;i<n;i++){add(i,i+1,-1);}int flag=SPFA(s,t);if(flag==true){cout<<dist[t]<<endl;}else{cout<<-1<<endl;}}return 0;
}

HDU3440(差分约束+SPFA算法)相关推荐

  1. poj1201(差分约束+SPFA)

    看到这道题,其实就是和poj1716是差不多的 题意:给出n个闭整数区间[ai,bi]和n个整数C1,.,cn.计算具有区间[ai,bi]的至少ci公共元素的整数集Z的最小大小,对于每一个i=1,2, ...

  2. poj3169(差分约束+SPFA)

    题意:FJ有N头牛,这些牛都站在一条直线上等待,但是现在给出了一些条件: 1.首先列出哪些牛之间彼此喜欢,以及之间的最大距离,也就是A-B<=X 2.随后列出哪些牛之间彼此不喜欢,以及之间的最小 ...

  3. poj1716(差分约束+SPFA)

    题意:整数间隔[a,b],a<b,是以a开头和以b结尾的所有连续整数的集合.在包含至少两个不同整数的集合中找到每个间隔的最小元素数. 思路:采用差分约束算法:当问题可以转化为形如一组 xi‑x' ...

  4. HDU 1384 Intervals【差分约束-SPFA】

    类型:给出一些形如a−b<=k的不等式(或a−b>=k或a−b<k或a−b>k等),问是否有解[是否有负环]或求差的极值[最短/长路径]. 例子:b−a<=k1,c−b& ...

  5. P1993-小K的农场【差分约束,SPFA】

    正题 题目链接:https://www.luogu.org/problemnew/show/P1993 题目大意 有若干个条件 Wa+w>WbW_a+w>W_bWa​+w>Wb​ W ...

  6. BZOJ.4500.矩阵(差分约束 SPFA判负环 / 带权并查集)

    BZOJ 差分约束: 我是谁,差分约束是啥,这是哪 太真实了= = 插个广告:这里有差分约束详(并不)解. 记\(r_i\)为第\(i\)行整体加了多少的权值,\(c_i\)为第\(i\)列整体加了多 ...

  7. ZOJ 2770 Burn the Linked Camp 差分约束+SPFA

    第一道正儿八经的差分约束题 有排成一列的n个点,首先告诉你每个点的值最多是多少(最少显然要大于0),然后告诉你m段i,j,k,表示第i个点到第j个点的值的和至少有k,问你总和至少为多少. 要注意的是, ...

  8. 【POJ - 3169】 Layout(差分约束+spfa)(当板子记?)

    题干: Like everyone else, cows like to stand close to their friends when queuing for feed. FJ has N (2 ...

  9. POJ 1201 amp; HDU1384 amp; ZOJ 1508 Intervals(差分约束+spfa 求最长路径)

    题目链接: POJ:http://poj.org/problem?id=1201 HDU:http://acm.hdu.edu.cn/showproblem.php? pid=1384 ZOJ:htt ...

最新文章

  1. [导入]正确计算天干地支生肖的函数(.net)---更正版
  2. 搜索插件(django-haystack)
  3. easyuefi只能在基于uefi启动的_电脑知识:5分钟教你深入了解BIOS+MBR和UEFI+GPT
  4. java 如何实现对象克隆_Java对象克隆
  5. php设置http请求头信息和响应头信息
  6. mongodb多条件查询
  7. 在Vue.js中使用Mixin
  8. java 内存快照怎么看_jvm工具篇-(1)-分析工具MAT使用(内存快照分析)
  9. 圈圈教你玩usb第一版件电子资源使用说明
  10. Android面试线程,android 面试题 - 多线程部分
  11. 无法忘却的旋律:《荷东》、《猛士》各专辑的曲目列表
  12. ce修改手游服务器的数据,CE修改器修改游戏数据的方法
  13. PHP Encoder (ioncube 10) 加密工具的使用
  14. 第一章:Python数据分析前的基础铺垫
  15. package.json文件的作用
  16. 45页精华《2022中国建筑行业数字化转型研究报告》出炉(附下载)
  17. xctf攻防世界 CRYPTO高手进阶区 wtc_rsa_bbq
  18. 上百本中文书籍中对《人月神话》的引用(1)
  19. 虹科技术 | 终端入侵防御 | 在重大攻击中发现新的Babuk勒索软件
  20. Solaris培训第二章:OpenBoot PROM(转)

热门文章

  1. SKU表管理之删除SKU表数据
  2. 美多商城之项目准备-工程创建和配置
  3. MySQL数据库使用连接更新表中某个字段数据
  4. 词法,语法,句法,语义
  5. 小于60的数中能被1到10整除的数量
  6. 防火墙产品原理与应用:NAT支持的特殊协议
  7. Linux 里有/lib /boot /sbin /lib /dev等各个目录含义
  8. 线扫相机——机器视觉中无限制物体的检测
  9. 始于TensorFlow ,终于PyTorch
  10. 【OpenCV 4开发详解】图像透视变换