题目描述

当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近些。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. pyplot基础图表函数概述

    pyplot饼图的绘制 pyplot直方图的绘制 极坐标图的绘制

  2. 十五、mac 中登陆mysql忘记密码解决办法

    mac 中登陆mysql忘记密码解决办法 1.打开终端,输入命令:cd /usr/local/mysql/bin 2.mysql -uroot -p,用这条命令登陆时报错信息: 报错:Enter pa ...

  3. 11.2,nginx负载均衡实验

    Nginx负载均衡概述 Web服务器,直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台WEB服务器组成集群,前端使用Nginx负载均衡,将请求分散的打到我们的后端服务器集群中,实现 ...

  4. Java线程和多线程(五)——单例类中的线程安全

    单例模式是最广泛使用的创建模式之一.在现实世界之中,诸如Databae的连接或者是企业信息系统(EIS)等,通常其创建都是受到限制的,应该尽量复用已存在对象而不是频繁创建销毁.为了达到这个目的,开发者 ...

  5. startActivityForResult 请求码不正确

    今天遇到一个坑,就是 startActivityForResult 接收不到正确的请求码. 比如,我startActivityForResult的时候,设置的请求码是4,但是接收到的时候是100032 ...

  6. kafka生产者与消费者的生产消息与消费消息所遇到的问题

    当我们用API写kafka的时候 生产者生产消息,但是消费者接收不到消息?集群上启动消费者显示生产的消息.我们需要修改一下配置 (1)我们打开在虚拟机中修改kafka集群的配置文件 [root@spa ...

  7. linux 广播

    广播是一台主机向局域网内的所有主机发送数据.这时,同一网段的所有主机都能接收到数据.发送广播包的步骤大致如下: (1)确定一个发送广播的接口,如eth0 (2)确定广播的地址,通过ioctl函数,请求 ...

  8. 《Cracking the Coding Interview》——第17章:普通题——题目11

    2014-04-29 00:00 题目:给定一个rand5()函数,能够返回0~4间的随机整数.要求实现rand7(),返回0~6之间的随机整数.该函数产生随机数必须概率相等. 解法:自己想了半天没想 ...

  9. wget下载https文件,服务器可以虚拟机中不行的问题

    用wget下载一个图片资源(https协议),在服务器上可以,但在本机的虚拟机中卡在下面这里了: [root@localhost ~]# wget 'https://gp1.wac.edgecastc ...

  10. Windows Phone 图片扩展类

    using System.IO; using System.Text; using System.Net; using System.Threading.Tasks; using System.Win ...