【差分约束系统/SPFA】POJ3169-Layout
【题目大意】
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的更多相关文章
- 差分约束系统 + spfa(A - Layout POJ - 3169)
题目链接:https://cn.vjudge.net/contest/276233#problem/A 差分约束系统,假设当前有三个不等式 x- y <=t1 y-z<=t2 x-z< ...
- BZOJ 2330 [SCOI2011]糖果 ——差分约束系统 SPFA
最小值求最长路. 最大值求最短路. 发现每个约束条件可以转化为一条边,表示一个点到另外一个点至少要加上一个定值. 限定了每一个值得取值下界,然后最长路求出答案即可. 差分约束系统,感觉上更像是两个变量 ...
- 差分约束系统 POJ 3169 Layout
题目传送门 题意:有两种关系,n牛按照序号排列,A1到B1的距离不超过C1, A2到B2的距离不小于C2,问1到n的距离最大是多少.如果无限的话是-2, 如果无解是-1 分析:第一种可以写这样的方程: ...
- 差分约束系统+spfa(B - World Exhibition HDU - 3592 )
题目链接:https://cn.vjudge.net/contest/276233#problem/B 思路和上一个一样,不过注意点有两个,第一,对dis数组进行初始化的时候,应该初始化成ox3f3f ...
- PKU 1201 Intervals(差分约束系统+Spfa)
题目大意:原题链接 构造一个集合,这个集合内的数字满足所给的n个条件,每个条件都是指在区间[a,b]内至少有c个数在集合内.问集合最少包含多少个点.即求至少有多少个元素在区间[a,b]内. 解题思路: ...
- POJ3169 Layout
Description Like everyone else, cows like to stand close to their friends when queuing for feed. FJ ...
- ACM/ICPC 之 差分约束系统两道(ZOJ2770-POJ1201)
当对问题建立数学模型后,发现其是一个差分方程组,那么问题可以转换为最短路问题,一下分别选用Bellmanford-SPFA解题 ZOJ2770-Burn the Linked Camp //差分约束方 ...
- POJ-3169 Layout (差分约束+SPFA)
POJ-3169 Layout:http://poj.org/problem?id=3169 参考:https://blog.csdn.net/islittlehappy/article/detail ...
- POJ3169 Layout(差分约束系统)
POJ3169 Layout 题意: n头牛编号为1到n,按照编号的顺序排成一列,每两头牛的之间的距离 >= 0.这些牛的距离存在着一些约束关系:1.有ml组(u, v, w)的约束关系,表示牛 ...
随机推荐
- cmake设置默认静态链接库
在使用cmake来编写CMakeLists.txt时,如果不特别指明,那么cmake是默认动态链接库的,最终生成的二进制文件只能在与本地相同环境下的机器运行,如果想把生成的二进制拷贝到其他机器上执行, ...
- 2016.07.13-map的使用(以leetcode1-Two Sum为例)
map的使用 1.unordered_map和map的区别 2.如何用 3.for (int a : nums1) 4.to_string() 5.map的应用 1.unordered_map和map ...
- oggMonitor是什么
goldengate monitor是一套监控goldengate的软件,如果安装的ogg比较多,使用goldengate monitor可以清楚的看见全部OGG的每个进程运行状态,以及整个OGG的架 ...
- linux下定时器介绍1
POSIX Timer 间隔定时器 setitimer 有一些重要的缺点,POSIX Timer 对 setitimer 进行了增强,克服了 setitimer 的诸多问题: 首先,一个进程同一时刻只 ...
- 十五、springboot集成定时任务(Scheduling Tasks)(二)之(线程配置)
配置类: /** * 定时任务线程配置 * */ @Configuration public class SchedulerConfig implements SchedulingConfigurer ...
- NLP里面好的学习资料
别人推荐的网址: http://ruder.io/deep-learning-nlp-best-practices/index.html#wordembeddings
- java基础46 IO流技术(输出字符流/缓冲输出字符流)
一.输出字符流 1.1.输出字符流体系 --------| Writer:输出字符流的基类(抽象类) ----------| FileWriter:向文件输出数据输出字符流(把程序中的数据写到硬盘中 ...
- 整理一下关于Crypto加密的坑
之前写接口一般不用加密(做了权限处理),最近公司要求接口加密,我开始了入坑之路 因为公司其他人用的AES和DES加密,我就在网上查了下关于这方面的使用方法. 首先安装Crypto pip instal ...
- 网络编程--Socket与ServerSocket
1.服务器端代码 package net; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Sock ...
- 《精通Python设计模式》学习之建造者模式
这种模式,就是将一个最终对象分级分层建造出来. 在软件发布过程中,不同的JAVA,PYTHON,NODE.JS,ZIP压缩包, 就可以使用不同的阶段来使用建造者模式的. from enum impor ...