HDU3440(差分约束+SPFA算法)
题意:两栋房子之间的最大距离为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算法)相关推荐
- poj1201(差分约束+SPFA)
看到这道题,其实就是和poj1716是差不多的 题意:给出n个闭整数区间[ai,bi]和n个整数C1,.,cn.计算具有区间[ai,bi]的至少ci公共元素的整数集Z的最小大小,对于每一个i=1,2, ...
- poj3169(差分约束+SPFA)
题意:FJ有N头牛,这些牛都站在一条直线上等待,但是现在给出了一些条件: 1.首先列出哪些牛之间彼此喜欢,以及之间的最大距离,也就是A-B<=X 2.随后列出哪些牛之间彼此不喜欢,以及之间的最小 ...
- poj1716(差分约束+SPFA)
题意:整数间隔[a,b],a<b,是以a开头和以b结尾的所有连续整数的集合.在包含至少两个不同整数的集合中找到每个间隔的最小元素数. 思路:采用差分约束算法:当问题可以转化为形如一组 xi‑x' ...
- HDU 1384 Intervals【差分约束-SPFA】
类型:给出一些形如a−b<=k的不等式(或a−b>=k或a−b<k或a−b>k等),问是否有解[是否有负环]或求差的极值[最短/长路径]. 例子:b−a<=k1,c−b& ...
- P1993-小K的农场【差分约束,SPFA】
正题 题目链接:https://www.luogu.org/problemnew/show/P1993 题目大意 有若干个条件 Wa+w>WbW_a+w>W_bWa+w>Wb W ...
- BZOJ.4500.矩阵(差分约束 SPFA判负环 / 带权并查集)
BZOJ 差分约束: 我是谁,差分约束是啥,这是哪 太真实了= = 插个广告:这里有差分约束详(并不)解. 记\(r_i\)为第\(i\)行整体加了多少的权值,\(c_i\)为第\(i\)列整体加了多 ...
- ZOJ 2770 Burn the Linked Camp 差分约束+SPFA
第一道正儿八经的差分约束题 有排成一列的n个点,首先告诉你每个点的值最多是多少(最少显然要大于0),然后告诉你m段i,j,k,表示第i个点到第j个点的值的和至少有k,问你总和至少为多少. 要注意的是, ...
- 【POJ - 3169】 Layout(差分约束+spfa)(当板子记?)
题干: Like everyone else, cows like to stand close to their friends when queuing for feed. FJ has N (2 ...
- 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 ...
最新文章
- [导入]正确计算天干地支生肖的函数(.net)---更正版
- 搜索插件(django-haystack)
- easyuefi只能在基于uefi启动的_电脑知识:5分钟教你深入了解BIOS+MBR和UEFI+GPT
- java 如何实现对象克隆_Java对象克隆
- php设置http请求头信息和响应头信息
- mongodb多条件查询
- 在Vue.js中使用Mixin
- java 内存快照怎么看_jvm工具篇-(1)-分析工具MAT使用(内存快照分析)
- 圈圈教你玩usb第一版件电子资源使用说明
- Android面试线程,android 面试题 - 多线程部分
- 无法忘却的旋律:《荷东》、《猛士》各专辑的曲目列表
- ce修改手游服务器的数据,CE修改器修改游戏数据的方法
- PHP Encoder (ioncube 10) 加密工具的使用
- 第一章:Python数据分析前的基础铺垫
- package.json文件的作用
- 45页精华《2022中国建筑行业数字化转型研究报告》出炉(附下载)
- xctf攻防世界 CRYPTO高手进阶区 wtc_rsa_bbq
- 上百本中文书籍中对《人月神话》的引用(1)
- 虹科技术 | 终端入侵防御 | 在重大攻击中发现新的Babuk勒索软件
- Solaris培训第二章:OpenBoot PROM(转)