题目链接: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的更多相关文章

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

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

  2. POJ-3169 Layout---差分约束系统+Bellman

    题目链接: https://vjudge.net/problem/POJ-3169 题目大意: 一些母牛按序号排成一条直线.有两种要求,A和B距离不得超过X,还有一种是C和D距离不得少于Y,问可能的最 ...

  3. 【图论】POJ-3169 差分约束系统

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

  4. POJ-3169 Layout 最短路 差分约束

    题目链接:https://cn.vjudge.net/problem/POJ-3169 题意 Farmer John手下的一些牛有自己喜欢的牛,和讨厌的牛 喜欢的牛之间希望距离在给定距离D之内 讨厌的 ...

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

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

  6. [USACO2005][POJ3169]Layout(差分约束)

    题目:http://poj.org/problem?id=3169 题意:给你一组不等式了,求满足的最小解 分析: 裸裸的差分约束. 总结一下差分约束: 1.“求最大值”:写成"<=& ...

  7. POJ3169 Layout

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

  8. poj3169 最短路(差分约束)

    题意:一个农夫有n头牛,他希望将这些牛按照编号 1-n排成一条直线,允许有几头牛站在同一点,但是必须按照顺序,有一些牛关系比较好,希望站的距离不超过某个值,而有一些牛关系不太好,所以希望站的距离大于等 ...

  9. 【POJ3169 】Layout (认真的做差分约束)

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

  10. POJ3169差分约束系统

    题意:有n头牛,编号为1到n,对于关系好的ml头牛,al和bl之间的距离不大于dl,关系差的md头牛,ad和bd之间的距离不大于dd,求第1头牛和第n头牛之间的距离 分析:这是一道差分约束系统的题目, ...

随机推荐

  1. NumPy学习指南(第2版)

    第一章 NumPy快速入门 首先,我们将介绍如何在不同的操作系统中安装NumPy和相关软件,并给出使用NumPy的简单示例代码. 然后,我们将简单介绍IPython(一种交互式shell工具). 如前 ...

  2. Django入门4: ORM 数据库操作

    大纲 一.DjangoORM 创建基本类型及生成数据库表结构 1.简介 2.创建数据库 表结构 二.Django ORM基本增删改查 1.表数据增删改查 2.表结构修改 三.Django ORM 字段 ...

  3. Vagrant (二) - 日常操作

    立即上手 上一节中,我们介绍了怎样安装 Vagrant,安装本身并不困难.本章节中我们首先要快速上手,以便获得一个直观的概念: 建立一个工作目录 打开命令行工具,终端工具,或者iTerm2等,建立一个 ...

  4. 无法打开到SQL Server的连接 (Microsoft SQL Server, 错误:53) .

    标题: 连接到服务器 ------------------------------ 无法连接到 MSSQLSERVER. ------------------------------ 其他信息: 在与 ...

  5. python操作ftp文件

    from ftplib import FTP ftp = FTP('ftp.abc.com') ftp.login(user='username', passwd='********') ftp.cw ...

  6. 图论--LCA--在线RMQ ST

    板子测试POJ1330,一发入魂,作者是KuangBin神犇,感谢?‍ #include <cstdio> #include <cstring> #include <al ...

  7. 疯子的算法总结10--最小生成树Kruscal

    按照权值排序可得,就有如下顺序: 1. 1-2 1 2. 1-4 2 3. 1-5 2 4. 2-5 3 5. 2-3 4 6. 4-5 4 每次选取最小边泉,判断是否同属一个集合,如果不属于同一集合 ...

  8. Nginx模块开发(1)————类helloworld

    Nginx看了一点了,准备写个helloworld试试,觉得只看书的话很多东西都乱乱的,晕晕的,印象不深. 我的helloworld模块的目的就是:能够在浏览器里输入http://你的ip地址/lcw ...

  9. 题目分享V

    题意:现在两个人做游戏,每个人刚开始都是数字1,谁赢了就能乘以k^2,输的乘以k(k可以是任意整数,每次不一定相同)现在给你最终这两个人的得分,让你判断是否有这个可能,有可能的话Yes,否则No. 分 ...

  10. vue2.0那些坑之使用elementUI后v-on:click事件不生效问题

    最近在维护vue2.0的项目,遇到了不少坑,在这里说下引用elementui之后,使用v-on:click绑定点击事件无效的情况,如下图: 我想阻止冒泡事件,发现无效.这里将@click换成了@cli ...