博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[POJ3169] Layout
阅读量:7096 次
发布时间:2019-06-28

本文共 1506 字,大约阅读时间需要 5 分钟。

 

题意:FJ的N头牛要按编号排成一行,有的牛a和牛b关系好,距离不能超过c,有的牛a和牛b关系不好,距离至少要为c,求牛1到牛n的最大距离

题解:

差分约束spfa

满足不等式:

d[i+1]-d[i]>=0 -> d[i]-d[i+1]<=0

d[j]-d[i]<=c     -> d[j]-d[i]<=c   

d[j]-d[i]>=c     -> d[i]-d[j]<=-c

求d[t]-d[s]的最大值

由于是求最大值,所以用最短路求解,按照上述不等式连边即可

 

总结:求解差分约束系统的一般思路

1、先找出要求的量的关系,确定最短路还是最长路

2、确定求什么后将条件给出的式子化成要求的那一种

对于差分不等式,a - b <= c ,建一条 b 到 a 的权值为 c 的边,求的是最短路,得到的是最大值(本题求的就是最大值),对于不等式 a - b >= c ,建一条 b 到 a 的权值为 c 的边,求的是最长路,得到的是最小值。

#include
#include
#include
#include
#include
#include
#include
#define ll long longusing namespace std;const int N = 1010;const int M = 20010;int n,n1,n2,e_num;int nxt[M],to[M],w[M],h[N],cnt[N];ll inf=1ll<<60,dis[N];bool in[N];queue
q;int gi() { int x=0,o=1; char ch=getchar(); while(ch!='-' && (ch<'0' || ch>'9')) ch=getchar(); if(ch=='-') o=-1,ch=getchar(); while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar(); return o*x;}void add(int x, int y, int z) { nxt[++e_num]=h[x],to[e_num]=y,w[e_num]=z,h[x]=e_num;}bool spfa() { for(int i=1; i<=n; i++) dis[i]=inf; dis[1]=0,in[1]=0,q.push(1); while(!q.empty()) { int u=q.front(); in[u]=0,q.pop(); for(int i=h[u]; i; i=nxt[i]) { int v=to[i]; if(dis[u]+w[i]
n) return false; } } } } return true;}int main() { n=gi(),n1=gi(),n2=gi(); for(int i=1; i<=n1; i++) { int x=gi(),y=gi(),z=gi(); add(x,y,z); } for(int i=1; i<=n2; i++) { int x=gi(),y=gi(),z=gi(); add(y,x,-z); } for(int i=1; i

 

转载于:https://www.cnblogs.com/HLXZZ/p/7554534.html

你可能感兴趣的文章
求任意数阶乘最后一位
查看>>
android 循环操作
查看>>
Promise & Deferred objects in JavaScript Pt.1: Theory and Semantics.
查看>>
Joyoi花店橱窗(原tyvj1124)
查看>>
JavaMail基础案例开发
查看>>
被称"硬盘杀手"的几个win7系统服务如何关闭(转)
查看>>
C# 存储过程
查看>>
软件体系结构的第二次实验
查看>>
无聊记记
查看>>
ODI Scenario 场景
查看>>
操作JSON对象
查看>>
iOS 模态视图,视图之间的切换
查看>>
iptables
查看>>
.NET自动识别GB2312与UTF-8编码的文件
查看>>
Linux下apache日志分析与状态查看方法
查看>>
hdu2412(树形dp)
查看>>
js返回函数, 函数名后带多个括号的用法及join()的注意事项
查看>>
【NOIP2007】矩阵取数
查看>>
关于VIM在Win10下的无意义折腾
查看>>
ibatis example Class 使用
查看>>