【问题描述】

Czy喜欢将他的妹子们排成一队。假设他拥有N只妹纸,编号为1至N。Czy让他们站成一行,等待自己来派送营养餐。这些妹纸按照编号大小排列,并且由于它们都很想早点吃饭,于是就很可能出现多只妹纸挤在同一位置的情况(也就是说,如果我们认为妹纸位于数轴上,那么多只妹纸的位置坐标可能相同)。

因为众所周知的原因,某些妹纸之间互相喜欢,他们希望互相之间的距离至多为一个定值。但某些妹纸之间互相厌恶,他们希望互相之间的距离至少为一个定值。现在给定ML个互相喜爱的妹纸对以及他们之间距离的最大值,MD个互相厌恶的妹纸对以及他们之间距离的最小值。

你的任务是计算在满足以上条件的前提下,帮助Czy计算出编号为1和编号为N的妹纸之间距离的最大可能值。

【输入】

输入文件为 layout.in。

第一行有 3 个整数,每两个整数之间用一个空格隔开,依次表示 n,ML和DL ;

此后ML行,每行包含三个用空格分开的整数A,B和D,其中A,B满足1<=A<=B<=N。表示编号为A和B的妹纸之间的距离至多为D。

此后MD行,每行包含三个用空格分开的整数A,B和D,其中A,B满足1<=A<=B<=N。表示编号为A和B的妹纸之间的距离至少为D。

【输出】

输出文件名为 layout.out。

输出文件仅包含一个整数。如果不存在任何合法的排队方式,就输出-1。如果编号1和编号N的妹纸间距离可以任意,就输出-2 。否则输出他们之间的最大可能距离。

【输入输出样例】

 

layout.in

layout.out

4 2 1

1 3 10

2 4 20

2 3 3

27

【数据范围】

对于40%的数据,N<=100;

对于100%的数据,N<=1000;ML,MN<=10000;D<=1000000。

【解题思路】

看到这个题之后我果断敲了一个贪心,然后骗到了三十分

题目的正解

很明显可以看出是差分约束系统的题目,如果A和B距离至多为D则建边A->B权值为D,距离至少为D则建边B->A权值为-D。然后最短路。若有负权环则输出-1,若无法到达点N则输出-2,否则直接输出1~N的距离即可。

这是我第一次做到关于差分约束系统的题目,并不是很懂。

http://www.cnblogs.com/void/archive/2011/08/26/2153928.html 讲的比较详细,然而我还不是很懂

个人见解如下

对于一个标准的式子 x-y<=d 这是第一个约束条件

在其他约束条件下我们会间接得到有关x-y的其他约束条件

为了使这个式子取到最大值,我们必须找到其他约束条件的最小值(跑最短路),才能找到最小值,求最大值就是求最长路

 procedure open;
begin
assign(input,'layout.in');
assign(output,'layout.out');
reset(input);
rewrite(output);
end; procedure closs;
begin
close(input);
close(output);
end;
var t,h,u,v,d,n,ml,mn,i:longint;
b,dt:array[..,..] of longint;
dl:array[..] of longint;
dis,cs:array[..] of longint;
pd:array[..] of boolean;
function spfa:longint;
var now,i:longint;
begin
filldword(dis,sizeof(dis)div ,maxlongint div );
inc(t);
dis[]:=;
dl[t]:=;
while h<t do
begin
inc(h);
now:=dl[h];
for i:= to b[now,] do
begin
if dis[now]+dt[now,b[now,i]]<dis[b[now,i]] then
begin
inc(cs[b[now,i]]);
if cs[b[now,i]]>n- then exit(-);
dis[b[now,i]]:=dis[now]+dt[now,b[now,i]];
if not pd[b[now,i]] then
begin
inc(t);
dl[t]:=b[now,i];
pd[b[now,i]]:=true;
end;
end;
end;
pd[now]:=false;
end;
if dis[n]=maxlongint div then exit(-) else exit(dis[n]);
end; begin
open;
read(n,ml,mn);
for i:= to ml do
begin
read(u,v,d);
inc(b[u,]);
b[u,b[u,]]:=v;
dt[u,v]:=d;
end;
for i:= to mn do
begin
read(u,v,d);
inc(b[v,]);
b[v,b[v,]]:=u;
dt[v,u]:=-d;
end;
writeln(spfa);
closs;
end.

排队(BZOJ1731:[Usaco2005 dec]Layout 排队布局)的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. WinServer 之 发布WebService后调用出现" The test form is only available for requests from the local machine. "

    当您尝试从远程计算机访问 Web 服务时,不会显示“调用”按钮.并且,您会收到以下错误信息: The test form is only available for requests from the ...

  2. 模仿京东顶部搜索条效果制作的一个小demo

    最近模仿京东顶部搜索条效果制作的一个小demo,特贴到这里,今后如果有用到可以参考一下,代码如下 #define kScreenWidth [UIScreen mainScreen].bounds.s ...

  3. 【推理】UVa 10771 - Barbarian tribes

      Barbarian tribes  In a lost land two primitive tribes coexist: Gareds and Kekas. Every summer sols ...

  4. Jquery选择器,操作DOM

    刚接触jQuery,她真的是个好东西,操作DOM,修改样式,都很方便,主要获取DOM树的类和子代很方便. 今天用jq做了tab面包屑,不过用的是别人的代码,自己修改的,不错也做出来了,原理也有些明白, ...

  5. TreeMap与TreeSet的实现

    虽然TreeMap 是 Map 接口的常用实现类,而 TreeSet 是 Set 接口的常用实现类,但TreeSet底层是通过 TreeMap来实现的,因此二者的实现方式完全一样.而 TreeMap ...

  6. ASP伪静态页面(不需要通过iis+ISAPI_Rewrite)

    很简单的教程,献给喜欢SEO的朋友们. 不需要通过iis+ISAPI_Rewrite做基于IIS的url rewrite 一.数据库很简单使用ACCESS,Data.mdb建立一个表Article,三 ...

  7. Android Activity常用生命周期函数

    在Activity中主要有7个常用的周期函数,他们分别是: (一)onCreate 在Activity对象被第一次创建时调用 注: 从另一个Activity返回到前一个Activity时,不会调用该函 ...

  8. JavaScript高级程序设计(九):基本概念----语句的特殊点

    一.Label语句.break/continue语句和for循环语句的结合使用: 1.Label语句可以在代码中添加标签,以便将来使用.语法: label:statment   eg: start:f ...

  9. Oracle Split Partitions

    1. 创建分离分区的存储过程 CREATE OR REPLACE Procedure SP_Split_Partition( v_table_name_in in varchar2, v_part_n ...

  10. 07_控制线程_join_线程插队

    [join线程简述] join()方法:Thread提供的让一个线程去等待另一个线程完成.当在某个程序执行流中(如main线程)调用其它线程(如t2线程)的join方法(t2.join()),调用线程 ...