Layout

Description

Like everyone else, cows like to stand close to their friends when queuing for feed. FJ has N (2 <= N <= 1,000) cows numbered 1..N standing along a straight line waiting for feed. The cows are standing in the same order as they are numbered, and since they can be rather pushy, it is possible that two or more cows can line up at exactly the same location (that is, if we think of each cow as being located at some coordinate on a number line, then it is possible for two or more cows to share the same coordinate).

Some cows like each other and want to be within a certain distance of each other in line. Some really dislike each other and want to be separated by at least a certain distance. A list of ML (1 <= ML <= 10,000) constraints describes which cows like each other and the maximum distance by which they may be separated; a subsequent list of MD constraints (1 <= MD <= 10,000) tells which cows dislike each other and the minimum distance by which they must be separated.

Your job is to compute, if possible, the maximum possible distance between cow 1 and cow N that satisfies the distance constraints.

Input

Line 1: Three space-separated integers: N, ML, and MD.

Lines 2..ML+1: Each line contains three space-separated positive integers: A, B, and D, with 1 <= A < B <= N. Cows A and B must be at most D (1 <= D <= 1,000,000) apart.

Lines ML+2..ML+MD+1: Each line contains three space-separated positive integers: A, B, and D, with 1 <= A < B <= N. Cows A and B must be at least D (1 <= D <= 1,000,000) apart.

Output

Line 1: A single integer. If no line-up is possible, output -1. If cows 1 and N can be arbitrarily far apart, output -2. Otherwise output the greatest possible distance between cows 1 and N.

Sample Input

4 2 1
1 3 10
2 4 20
2 3 3

Sample Output

27

Hint

Explanation of the sample:

There are 4 cows. Cows #1 and #3 must be no more than 10 units apart, cows #2 and #4 must be no more than 20 units apart, and cows #2 and #3 dislike each other and must be no fewer than 3 units apart.

The best layout, in terms of coordinates on a number line, is to put cow #1 at 0, cow #2 at 7, cow #3 at 10, and cow #4 at 27.

Source

【题意】
有 N 头奶牛正在排队，它们的编号为 1 到 N，约翰要给它们安排合适的排队位置，满足以下条

• 首先，所有奶牛要站在一条直线上。由于是排队，所以编号小的奶牛要靠前，不能让编号大的

• 奶牛喜欢和朋友靠得近点。朋友关系有 F 对，其中第 Ai 头奶牛和第 Bi 头奶牛是第 i 对朋友，

• 奶牛还要和讨厌的同类保持距离。敌对关系有 E 对，其中第 Xi 头奶牛和第 Yi 头奶牛是第 i

你能否帮助约翰找到一个合理的站位方法，满足所有奶牛的要求，而且让 1 号奶牛和 N 号奶牛间的

【分析】

啊，当然很快看出是差分约束，然而，呵呵，我以前没弄清楚的后遗症，不知道怎样跑是距离最大的。。
跑最短路求得就是最大的距离，跑最长路求的就是最小的距离。

 #include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
#define INF 0xfffffff
#define Maxn 1010
#define Maxm 22010

struct node
{
int x,y,c,next;
}t[Maxm];int len;
int first[Maxn];

void ins(int x,int y,int c)
{
t[++len].x=x;t[len].y=y;t[len].c=c;
t[len].next=first[x];first[x]=len;
}

int n;
int dis[Maxn],cnt[Maxn];
bool inq[Maxn];

queue<int > q;

int ffind()
{
memset(dis,,sizeof(dis));
while(!q.empty()) q.pop();
dis[]=;q.push();
while(!q.empty())
{
int x=q.front();
cnt[x]++;
if(cnt[x]>n) return -;
for(int i=first[x];i;i=t[i].next)
{
int y=t[i].y;
if(dis[y]>dis[x]+t[i].c)
{
dis[y]=dis[x]+t[i].c;
if(!inq[y])
{
inq[y]=;
q.push(y);
}
}
}
inq[x]=;q.pop();
}
if(dis[n]>=INF-) return -;
return dis[n];
}

int main()
{
int f,e;
scanf("%d%d%d",&n,&f,&e);
len=;
memset(first,,sizeof(first));
for(int i=;i<=f;i++)
{
int x,y,c;
scanf("%d%d%d",&x,&y,&c);
ins(x,y,c);
}
for(int i=;i<=e;i++)
{
int x,y,c;
scanf("%d%d%d",&x,&y,&c);
ins(y,x,-c);
}
for(int i=;i<n;i++) ins(i+,i,);
int ans=ffind();
printf("%d\n",ans);
return ;
}

[POJ 3169]

？？？

2016-10-21 18:04:51

## 【POJ3169 】Layout （认真的做差分约束）的更多相关文章

1. S - Layout （最短路&amp;&amp;差分约束）

Like everyone else, cows like to stand close to their friends when queuing for feed. FJ has N (2 < ...

2. ShortestPath:Layout(POJ 3169)（差分约束的应用）

布局 题目大意:有N头牛,编号1-N,按编号排成一排准备吃东西,有些牛的关系比较好,所以希望他们不超过一定的距离,也有一些牛的关系很不好,所以希望彼此之间要满足某个关系,牛可以 ...

3. bzoj 1731: [Usaco2005 dec]Layout 排队布局【差分约束】

差分约束裸题,用了比较蠢的方法,先dfs_spfa判负环,再bfs_spfa跑最短路 注意到"奶牛排在队伍中的顺序和它们的编号是相同的",所以\( d_i-d_{i-1}>= ...

4. 图论--差分约束--POJ 3169 Layout（超级源汇建图）

Like everyone else, cows like to stand close to their friends when queuing for feed. FJ has N (2 < ...

5. poj 3169 Layout （差分约束）

3169 -- Layout 继续差分约束. 这题要判起点终点是否连通,并且要判负环,所以要用到spfa. 对于ML的边,要求两者之间距离要小于给定值,于是构建(a)->(b)=c的边.同理,对 ...

6. ☆ [POJ1021] Intervals 「差分约束」

传送门 >Here< 题意:给出N段区间,并告诉你每段区间里有几个数(一个位置只能放一个数) 问总共至少有几个数 解题思路 差分约束题,本蒟蒻也是第一次做差分约束题…… 所谓差分约束,常常 ...

7. ACM差分约束笔记

https://www.cnblogs.com/31415926535x/p/10463112.html 很早之前学最短路的时候就看了一眼差分约束,,当时以为这种问题不怎么会出现,,而且当时为了只为了 ...

8. BZOJ4383 [POI2015]Pustynia[线段树优化建边+拓扑排序+差分约束]

收获挺大的一道题. 这里的限制大小可以做差分约束,从$y\to x$连$1$,表示$y\le x-1$即$y<x$,然后跑最长路求解. 但是,如果这样每次$k+1$个小区间每个点都向$k$个断点 ...

9. POJ-3169 Layout (差分约束+SPFA）

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

## 随机推荐

1. Delphi XE8,C++ Builder XE8,RAD Studio XE8 官方 ISO 文件下载,附激活工具

2. Fluent NHibernate and Mysql,SQLite,PostgreSQL

3. opal 将ruby代码转化成javascript

点这里 https://github.com/opal Opal    Opal is a ruby to javascript source-to-source compiler. It also ...

4. 破解NET的四大神器

原本这篇文章可以更早一星期写出来与大家分享,由于某方面的原因耽搁到现在,心里竟有那么一点好像对不住大家的感觉.这当然与神器有关,因为我发现利用这四大神器我似乎觉得几乎所有的NET程序破解都不在话下了 ...

5. linux常用命令之ln

ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln –s 源文件 目标文件. 当我们需要在不同的目录,用到相同的 ...

6. 让自己的apk可以被别人用二维码下载

通过二维码下载的流程是, 1.截获地址当有一个url被二维码扫描后的被截获,请先确认能够被截获. 2.接受intent无论是把这个消息的地址发送给activity,还是reciver,都要进入到你的程 ...

7. ssh隧道

最近有需求使用ssh隧道,顺便研究了下,以下记录一下大概说明 ssh隧道顾名思义在可以通过ssh连接的server之间建立加密隧道,常用于突破网络限制 常用三种端口转发模式:本地端口转发,远程端口转发 ...

8. Oracle联机日志损坏解决办法

关于此问题,在网上找到一篇不错的文章. 大家都清楚,联机日志分为当前联机日志和非当前联机日志. ---------------------------------------------------- ...

9. ESP32搭建1.VMware Workstation 12.5下Ubuntu16.04环境搭建（简易搭建）

一.需要下载的资源: 1.     下载VMware Workstation 链接: https://pan.baidu.com/s/1nuDEc3n 密码: 89xc 2.     下载Ubuntu ...

10. SQL--server事物

事物 特点: 1.原子性:事物必须是一个自动工作的单元, 2.一致性:事物结束的时候,所有内部数据都是正确的 3.隔离性:并发多个事物时,各个事物不干涉内部数据,处理的都是另外一个事物处理之前或之后的 ...