题目描述

当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近些。FJ有N(2<=N<=1000)头奶牛,编号从1到N,沿一条直线站着等候喂食。奶牛排在队伍中的顺序和它们的编号是相同的。因为奶牛相当苗条,所以可能有两头或者更多奶牛站在同一位置上。即使说,如果我们想象奶牛是站在一条数轴上的话,允许有两头或更多奶牛拥有相同的横坐标。

一些奶牛相互间存有好感,它们希望两者之间的距离不超过一个给定的数L。另一方面,一些奶牛相互间非常反感,它们希望两者间的距离不小于一个给定的数D。给出ML条关于两头奶牛间有好感的描述,再给出MD条关于两头奶牛间存有反感的描述。(1<=ML,MD<=10000,1<=L,D<=1000000)

你的工作是:如果不存在满足要求的方案,输出-1;如果1号奶牛和N号奶牛间的距离可以任意大,输出-2;否则,计算出在满足所有要求的情况下,1号奶牛和N号奶牛间可能的最大距离。

输入

第一行:三个空间分隔的整数:N,ML,和MD
第二行至第ML+1行:每行包含三个空间分隔的正整数:A,B和D,其中1<=
A<=N。表示牛A和牛B必须在距离D以内。第ML+2至第ML+MD+1行:每行包含三个空间分隔的正整数:A,B和D,其中1 <=
A<=N。表示牛A和牛B必须在距离D以上。

输出

输出仅有一个整数。如果不可能安排奶牛的布局,输出-1。如果奶牛1和奶牛N可以相距任意距离,输出-2。否则输出奶牛1和奶牛N之间的最大距离。

样例输入

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

样例输出

27
差分约束,由于题目求最大值,所以最短路,把约束条件化成x-y<=b的形式
对于距离条件:d[i+1]>=d[i]        =>       d[i]-d[i+1]<=0      =>     连一条从i+1到i,权值为0的边
对于喜欢条件:d[x]-d[y]<=L(x>y) => 连一条从y到x,权值为L的边
对于讨厌条件:d[x]-d[y]>=L(x>y) => d[y]-d[x]<=-L => 连一条从x到y,权值为-L的边
存在负环,输出-1,从1号点走不到n号点,输出-2
把一号奶牛看成在原点,答案为d[n]
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int f,n,ml,md,nxt[],to[],c[],h[],que[],H,T,k,d[];
bool inq[];int cnt[];
void ins(int u,int v,int t){nxt[++k]=h[u];to[k]=v;c[k]=t;h[u]=k;}
int spfa()
{
memset(inq,,sizeof(inq));memset(cnt,,sizeof(cnt));memset(d,,sizeof(d));int INF=d[];
d[]=;inq[]=;cnt[]++;H=;T=;que[T++]=;
while(H<T)
{
int u=que[H++];inq[u]=;
for(int i=h[u];i;i=nxt[i])
{
int v=to[i],t=c[i];
if(d[v]>d[u]+t)
{
d[v]=d[u]+t;cnt[v]++;
if(cnt[v]>n)return -;
if(!inq[v])inq[v]=,que[T++]=v;
}
}
}
if(d[n]==INF)return -;
return d[n];
}
int main()
{
scanf("%d%d%d",&n,&ml,&md);
for(int i=;i<n;i++)ins(i+,i,);
for(int i=;i<=ml;i++)
{
int u,v,C;scanf("%d%d%d",&u,&v,&C);ins(u,v,C);
}
for(int i=;i<=md;i++)
{
int u,v,C;scanf("%d%d%d",&u,&v,&C);ins(v,u,-C);
}
printf("%d",spfa());
return ;
}

 

[Usaco2005 dec]Layout的更多相关文章

  1. 【BZOJ1731】[Usaco2005 dec]Layout 排队布局 差分约束

    [BZOJ1731][Usaco2005 dec]Layout 排队布局 Description Like everyone else, cows like to stand close to the ...

  2. 1731: [Usaco2005 dec]Layout 排队布局*

    1731: [Usaco2005 dec]Layout 排队布局 题意: n头奶牛在数轴上,不同奶牛可以在同个位置处,编号小的奶牛必须在前面.m条关系,一种是两头奶牛距离必须超过d,一种是两头奶牛距离 ...

  3. 排队(BZOJ1731:[Usaco2005 dec]Layout 排队布局)

    [问题描述] Czy喜欢将他的妹子们排成一队.假设他拥有N只妹纸,编号为1至N.Czy让他们站成一行,等待自己来派送营养餐.这些妹纸按照编号大小排列,并且由于它们都很想早点吃饭,于是就很可能出现多只妹 ...

  4. [Usaco2005 dec]Layout 排队布局 差分约束

    填坑- 差分约束一般是搞一个不等式组,求xn-x1的最大最小值什么的,求最大值就转化成xa<=xb+w这样的,然后建图跑最短路(这才是最终约束的),举个例子 x1<=x0+2x2<= ...

  5. [bzoj1731] [Usaco2005 dec]Layout 排队布局

    差分约束系统...因为题目要求的是1和n的最大距离所以这题就跑最长路.. 对于互相反感的牛(i与j互相反感,彼此距离至少为len,i<j),就有dis[j]-dis[i]>=len.就加一 ...

  6. bzoj 1731: [Usaco2005 dec]Layout 排队布局 ——差分约束

    Description 当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近些.FJ有N(2<=N<=1000)头奶牛,编号从1到N,沿一条直线站着等候喂食.奶牛排在队伍中的顺序和它们的编号是相 ...

  7. 【BZOJ】1731: [Usaco2005 dec]Layout 排队布局

    [题意]给定按编号顺序站成一排的牛,给定一些约束条件如两牛距离不小于或不大于某个值,求1和n的最大距离.无解输出-1,无穷解输出-2. [算法]差分约束+最短路 [题解]图中有三个约束条件,依次分析: ...

  8. BZOJ 1731: [Usaco2005 dec]Layout 排队布局

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

  9. bzoj 1731 [Usaco2005 dec]Layout 排队布局——差分约束

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1731 对差分约束理解更深.还发现美妙博客:http://www.cppblog.com/me ...

随机推荐

  1. __builtin_popcount() 函数

    详解 该函数的主要作用是计算一个数字的二进制中有多少个1,返回值就是其中1的个数. 它使用一张基于表的方法来进行位搜索,因此这个操作的执行效率很高 此处举一题 P1582 倒水 #include &l ...

  2. python基础之数据类型与变量patr1

    1:编写for循环,利用索引遍历出每一个字符 msg='hello egon 666' 2:编写while循环,利用索引遍历出每一个字符 msg='hello egon 666' 3:msg='hel ...

  3. PHP.31-TP框架商城应用实例-后台7-商品会员修改-页面优化,多表数据更新

    商品表修改功能 1.页面优化,类似添加页面 <layout name="layout" /> <div class="tab-div"> ...

  4. AD15添加导入组件

  5. Java Spring Controller 获取请求参数的几种方法

    技术交流群:233513714  1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交.若"Content-Type"=& ...

  6. HA集群中namenode连接不上journalnode,导致namenode启动不了

    查看日志发现一下的错误: 2018-10-08 15:29:26,373 FATAL org.apache.hadoop.hdfs.server.namenode.FSEditLog: Error: ...

  7. Linux查看程序端口占用

    使用命令: 1.ps -aux | grep 80 2.使用命令:netstat –apn 查看所有的进程和端口使用情况.

  8. C#方法参数

    使用静态字段来模拟全局变量. 如果调用者想要得到被调用者的值: 1.返回值 2.不管是实参还是形参,都是在内存中开辟了空间的. 3.方法的功能一定要单一. GetMax(int n1,int n2) ...

  9. Erlang OTP学习:supervisor [转]

    转自: http://diaocow.iteye.com/blog/1762895 今天细致的看了下supervisor,现在做个总结: 其中,方块代表supervisor process,它的功能很 ...

  10. 网络--TIME_WAIT状态

    MSL时间 MSL就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间IP数据包将在网络中消失 .MSL在RFC 1122 ...