POJ3169
题目链接:http://poj.org/problem?id=3169
AC思路:
spfa算法。
设各牛的位置为x[ ]。
对于感情好的牛,即第2到ML+1行:A B D, 有x[B] - x[A] <=D.而对于感情不好的牛,即第ML+2到ML+MD+1行: A B D, 则有x[B] - x[A] >=D,可以转化为x[A] - x[B] <= -D.
这是一个差分约束题,第一类式子x[B] - x[A] <=D可以看成是从点B到点A的边权为D,而第二类式子也可以转换成x[A] - x[B] <= -D,看成是从点A到点B的负权边。
最终目的是要求 x[N] - x[1]的最大值,其实就是从N点出发到 1点的单源最短路问题。理解了差分约束这个概念,这道题就不难了。
AC代码:
#include <queue>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxv=+,maxe=+;
const int inf=0x7ffffff;
int edgecount,N;
int head[maxv],d[maxv],visitcount[maxv];
bool inq[maxv];
queue<pair<int,int> > q;
struct edge{
int from,to,val,next;
edge(){}
edge(int _f,int _t,int _v,int _n){
from=_f,to=_t,val=_v,next=_n;
}
}es[maxe];
void addedge(int from,int to,int val){
es[edgecount]=edge(from,to,val,head[from]);
// printf("es[%d] = (%d,%d,%d,%d)\n",edgecount,from,to,val,head[from]);
head[from]=edgecount++;
}
bool spfa(int s){
for(int i=;i<=N;i++){
d[i]=inf;
inq[i]=(i==s);
visitcount[i]=;
}
d[s]=;
q.push(make_pair(d[s],s));
while(!q.empty()){
int dist=q.front().first,u=q.front().second;
q.pop();
inq[u]=false;
if(visitcount[u]++>N) return true;
for(int e=head[u];e!=-;e=es[e].next){
int t=es[e].to,value=es[e].val;
if(d[t]>d[u]+value){
d[t]=d[u]+value;
if(!inq[t]){
inq[t]=true;
q.push(make_pair(d[t],t));
}
}
}
}
return false;
}
int main()
{
memset(head,-,sizeof(head));
int ML,MD,A,B,D; edgecount=;
scanf("%d%d%d",&N,&ML,&MD);
while(ML--){
scanf("%d%d%d",&A,&B,&D);
addedge(B,A,D);
}
while(MD--){
scanf("%d%d%d",&A,&B,&D);
addedge(A,B,-D);
} if(spfa(N)) printf("-1\n");
else if(d[]==inf) printf("-2\n");
else printf("%d\n",d[]);
// for(int i=1;i<=N;i++) printf("%d\n",d[i]);
return ;
}
POJ3169的更多相关文章
- POJ3169 Layout(差分约束系统)
POJ3169 Layout 题意: n头牛编号为1到n,按照编号的顺序排成一列,每两头牛的之间的距离 >= 0.这些牛的距离存在着一些约束关系:1.有ml组(u, v, w)的约束关系,表示牛 ...
- POJ-3169 Layout---差分约束系统+Bellman
题目链接: https://vjudge.net/problem/POJ-3169 题目大意: 一些母牛按序号排成一条直线.有两种要求,A和B距离不得超过X,还有一种是C和D距离不得少于Y,问可能的最 ...
- 【图论】POJ-3169 差分约束系统
一.题目 Description Like everyone else, cows like to stand close to their friends when queuing for feed ...
- POJ-3169 Layout 最短路 差分约束
题目链接:https://cn.vjudge.net/problem/POJ-3169 题意 Farmer John手下的一些牛有自己喜欢的牛,和讨厌的牛 喜欢的牛之间希望距离在给定距离D之内 讨厌的 ...
- POJ-3169 Layout (差分约束+SPFA)
POJ-3169 Layout:http://poj.org/problem?id=3169 参考:https://blog.csdn.net/islittlehappy/article/detail ...
- [USACO2005][POJ3169]Layout(差分约束)
题目:http://poj.org/problem?id=3169 题意:给你一组不等式了,求满足的最小解 分析: 裸裸的差分约束. 总结一下差分约束: 1.“求最大值”:写成"<=& ...
- POJ3169 Layout
Description Like everyone else, cows like to stand close to their friends when queuing for feed. FJ ...
- poj3169 最短路(差分约束)
题意:一个农夫有n头牛,他希望将这些牛按照编号 1-n排成一条直线,允许有几头牛站在同一点,但是必须按照顺序,有一些牛关系比较好,希望站的距离不超过某个值,而有一些牛关系不太好,所以希望站的距离大于等 ...
- 【POJ3169 】Layout (认真的做差分约束)
Layout Description Like everyone else, cows like to stand close to their friends when queuing for ...
- POJ3169差分约束系统
题意:有n头牛,编号为1到n,对于关系好的ml头牛,al和bl之间的距离不大于dl,关系差的md头牛,ad和bd之间的距离不大于dd,求第1头牛和第n头牛之间的距离 分析:这是一道差分约束系统的题目, ...
随机推荐
- LVS+Keepalived 实现高可用负载均衡集群
LVS+Keepalived 实现高可用负载均衡集群 随着网站业务量的增长,网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如 F5 ,Array又太贵,你们又是创业型互联公司如何有效 ...
- Mozilla开始推送Firefox Preview 5.0版 支持画中画特性
Mozilla 发布了 5.0 版本的 Firefox Preview 浏览器,根据 GitHub 上的发布说明,这次更新带来了一系列新的改进.其中包含对五个新的附加组件的支持,引入了对 Progre ...
- SpringCloud系列之集成Dubbo应用篇
目录 前言 项目版本 项目说明 集成Dubbo 2.6.x 新项目模块 老项目模块 集成Dubbo 2.7.x 新项目模块 老项目模块 参考资料 系列文章 前言 SpringCloud系列开篇文章就说 ...
- 7.哪些工具可以帮助查找bug或进行静态分析
哪些工具可以帮助查找bug或进行静态分析? PyChecker is a static analysis tool that detects the bugs in Python source cod ...
- Redis(一):数据结构与对象
前言 本书是Redis设计与实现的读书笔记,旨在对Redis底层的数据结构及实现有一定了解.本书所有的代码基于Redis 3.0. 简单动态字符串 SDS Redis没有直接使用C语言中的字符串,而是 ...
- nginx 反向代理转发导致css,js,图片失效
为什么80%的码农都做不了架构师?>>> 需要添加以下配置 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { proxy_pass htt ...
- C语言编程入门题目--No.8
题目:输出9*9口诀. 1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列. 2.程序源代码: #include "stdio.h" main() { int i,j,re ...
- 数学--数论--HDU1222 狼和兔子(最大公约数)
问题描述 有一座周围有n个洞的小山.孔从0到n-1有符号. 兔子必须藏在其中一个洞中.狼以逆时针方向搜索兔子.他第一个进入的洞是一个用0签名的洞.然后,他将每m个洞进入一个洞.例如,m = 2和n = ...
- commons-logging slf4j log4j 区别
日志门面 1.Apache通用日志接口(commons-logging.jar) Apache Commons包中的一个,包含了日志功能,必须使用的jar包.这个包本身包含了一个Simple Logg ...
- IDEA 打可执行jar包(maven项目)
1. Ctrl+Shift+Alt+S 打开 Project Structure 2.选择要执行的文件, 依次选择 项目, 方法所在文件(必须有main方法), 保存 3.如果之前路径下曾经打过 ...