【题目大意】

n头牛从小到大排,它们之间某些距离不能大于一个值,某些距离不能小于一个值,求第一头牛和第N头牛之间距离的最大值。

【思路】

由题意可以得到以下不等式d[AL]+DL≥d[BL];d[BD]+(-DD)≥d[AD];d[i+1]+0≥d[i],显然是差分约束系统。即构造从AL到BL权值为DL的边,从BD到AD构造权值为-DD的负边,从i+1到i构造权值为0的边。最后求最短路径。安利一个证明(点我)。

对于差分约束系统要注意的是,如果要求最大距离,用最短路径;求最小距离,用最长路径,要根据实际情况判断。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int MAXN=+;
struct Rec
{
int ori,des,len;
};
int n,ml,md;
int first[MAXN/],next[MAXN*+];
Rec edge[MAXN*+];
int vis[MAXN/],dis[MAXN/],appear[MAXN/]; void init()
{
memset(first,-,sizeof(first));
scanf("%d%d%d",&n,&ml,&md);
int j=-;
for (int i=;i<ml;i++)
{
j++;
scanf("%d%d%d",&edge[j].ori,&edge[j].des,&edge[j].len);
edge[j].ori--;edge[j].des--;
next[j]=first[edge[j].ori];
first[edge[j].ori]=j;
}
for (int i=;i<md;i++)
{
j++;
scanf("%d%d%d",&edge[j].des,&edge[j].ori,&edge[j].len);
edge[j].ori--;edge[j].des--;
edge[j].len=-edge[j].len;
next[j]=first[edge[j].ori];
first[edge[j].ori]=j;
}
for (int i=;i<n;i++)
{
j++;
edge[j].ori=i;edge[j].des=i-;edge[j].len=;
next[j]=first[edge[j].ori];
first[edge[j].ori]=j;
}
} void SPFA()
{
queue<int> que;
memset(vis,,sizeof(vis));
memset(appear,,sizeof(appear));
for (int i=;i<n;i++) dis[i]=0x7fffffff;
dis[]=;
que.push();
vis[]=;
appear[]++; while (!que.empty())
{
int head=que.front();
int k=first[head];
while (k!=-)
{
Rec e=edge[k];
if (dis[e.des]>dis[e.ori]+e.len)
{
dis[e.des]=dis[e.ori]+e.len;
if (!vis[e.des])
{
appear[e.des]++;
if (appear[e.des]>n)
{
cout<<-<<endl;
return;
}
que.push(e.des);
vis[e.des]=;
}
}
k=next[k];
}
vis[head]=;
que.pop();
}
if (dis[n-]==0x7fffffff) cout<<-<<endl; else cout<<dis[n-]<<endl;
} int main()
{
init();
SPFA();
system("pause");
return ;
}

【差分约束系统/SPFA】POJ3169-Layout的更多相关文章

  1. 差分约束系统 + spfa(A - Layout POJ - 3169)

    题目链接:https://cn.vjudge.net/contest/276233#problem/A 差分约束系统,假设当前有三个不等式 x- y <=t1 y-z<=t2 x-z< ...

  2. BZOJ 2330 [SCOI2011]糖果 ——差分约束系统 SPFA

    最小值求最长路. 最大值求最短路. 发现每个约束条件可以转化为一条边,表示一个点到另外一个点至少要加上一个定值. 限定了每一个值得取值下界,然后最长路求出答案即可. 差分约束系统,感觉上更像是两个变量 ...

  3. 差分约束系统 POJ 3169 Layout

    题目传送门 题意:有两种关系,n牛按照序号排列,A1到B1的距离不超过C1, A2到B2的距离不小于C2,问1到n的距离最大是多少.如果无限的话是-2, 如果无解是-1 分析:第一种可以写这样的方程: ...

  4. 差分约束系统+spfa(B - World Exhibition HDU - 3592 )

    题目链接:https://cn.vjudge.net/contest/276233#problem/B 思路和上一个一样,不过注意点有两个,第一,对dis数组进行初始化的时候,应该初始化成ox3f3f ...

  5. PKU 1201 Intervals(差分约束系统+Spfa)

    题目大意:原题链接 构造一个集合,这个集合内的数字满足所给的n个条件,每个条件都是指在区间[a,b]内至少有c个数在集合内.问集合最少包含多少个点.即求至少有多少个元素在区间[a,b]内. 解题思路: ...

  6. POJ3169 Layout

    Description Like everyone else, cows like to stand close to their friends when queuing for feed. FJ ...

  7. ACM/ICPC 之 差分约束系统两道(ZOJ2770-POJ1201)

    当对问题建立数学模型后,发现其是一个差分方程组,那么问题可以转换为最短路问题,一下分别选用Bellmanford-SPFA解题 ZOJ2770-Burn the Linked Camp //差分约束方 ...

  8. POJ-3169 Layout (差分约束+SPFA)

    POJ-3169 Layout:http://poj.org/problem?id=3169 参考:https://blog.csdn.net/islittlehappy/article/detail ...

  9. POJ3169 Layout(差分约束系统)

    POJ3169 Layout 题意: n头牛编号为1到n,按照编号的顺序排成一列,每两头牛的之间的距离 >= 0.这些牛的距离存在着一些约束关系:1.有ml组(u, v, w)的约束关系,表示牛 ...

随机推荐

  1. weight decay(权值衰减)、momentum(冲量)和normalization

    一.weight decay(权值衰减)的使用既不是为了提高你所说的收敛精确度也不是为了提高收敛速度,其最终目的是防止过拟合.在损失函数中,weight decay是放在正则项(regularizat ...

  2. USB descriptor【转】

    struct usb_device_descriptor { __u8 bLength;//设备描述符的字节数大小,为0x12 __u8 bDescriptorType;//描述符类型编号,为0x01 ...

  3. j-linkV8固件更新(任意版本)

    在使用j-link v8调试程序时,容易出现固件丢失或出错的情况,导致电脑不能识别,j-link上面的灯不亮.我今天刚刚遇到了这个情况,于是就拆开外壳,在网上搜索资料,发现刷固件相关的还真多,但是有一 ...

  4. 一、Vue入门

    vue官网:https://cn.vuejs.org/ 学习路线:VueJs2.0建议学习路线 在浏览器上安装 Vue Devtools工具 1.vue入门 <script src=" ...

  5. 05 Go 1.5 Release Notes

    Go 1.5 Release Notes Introduction to Go 1.5 Changes to the language Map literals The Implementation ...

  6. 01 Getting Started 开始

    Getting Started 开始 Install the Go tools Test your installation Uninstalling Go Getting help   Downlo ...

  7. Nginx - buffer缓冲区部分

    目录- 1. 前言- 2. 指令- 3. 原理及总结 1. 前言 关于缓冲,主要是合理设置缓冲区大小,尽量避免缓冲到硬盘 2. 指令 proxy_buffering 说明:proxy_bufferin ...

  8. jersey 过滤器名称绑定的问题 NameBinding Provider

    查资料也不容易查,这个问题困扰了我两天. 当没有 @Provider 的时候 过滤器不会被执行.

  9. C++链接与装载

    1..obj文件的内部结构 2.映射到进程虚拟空间 3.链接的原理    C++ Code  123456789   1.未解决符号表:提供了所有在该编译单元里引用但是定义并不在本编译单元里的符号及其 ...

  10. sem_open中信号量命名

    问题: sem_open will failed with "No such file or directory"   解释1: 这是由于在Linux内核中,创建信号量的默认路径是 ...