排队(BZOJ1731:[Usaco2005 dec]Layout 排队布局)
【问题描述】
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 排队布局)的更多相关文章
- [bzoj1731] [Usaco2005 dec]Layout 排队布局
差分约束系统...因为题目要求的是1和n的最大距离所以这题就跑最长路.. 对于互相反感的牛(i与j互相反感,彼此距离至少为len,i<j),就有dis[j]-dis[i]>=len.就加一 ...
- 【BZOJ1731】[Usaco2005 dec]Layout 排队布局 差分约束
[BZOJ1731][Usaco2005 dec]Layout 排队布局 Description Like everyone else, cows like to stand close to the ...
- 1731: [Usaco2005 dec]Layout 排队布局*
1731: [Usaco2005 dec]Layout 排队布局 题意: n头奶牛在数轴上,不同奶牛可以在同个位置处,编号小的奶牛必须在前面.m条关系,一种是两头奶牛距离必须超过d,一种是两头奶牛距离 ...
- [Usaco2005 dec]Layout 排队布局 差分约束
填坑- 差分约束一般是搞一个不等式组,求xn-x1的最大最小值什么的,求最大值就转化成xa<=xb+w这样的,然后建图跑最短路(这才是最终约束的),举个例子 x1<=x0+2x2<= ...
- bzoj 1731: [Usaco2005 dec]Layout 排队布局 ——差分约束
Description 当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近些.FJ有N(2<=N<=1000)头奶牛,编号从1到N,沿一条直线站着等候喂食.奶牛排在队伍中的顺序和它们的编号是相 ...
- 【BZOJ】1731: [Usaco2005 dec]Layout 排队布局
[题意]给定按编号顺序站成一排的牛,给定一些约束条件如两牛距离不小于或不大于某个值,求1和n的最大距离.无解输出-1,无穷解输出-2. [算法]差分约束+最短路 [题解]图中有三个约束条件,依次分析: ...
- BZOJ 1731: [Usaco2005 dec]Layout 排队布局
Description Like everyone else, cows like to stand close to their friends when queuing for feed. FJ ...
- bzoj 1731 [Usaco2005 dec]Layout 排队布局——差分约束
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1731 对差分约束理解更深.还发现美妙博客:http://www.cppblog.com/me ...
- bzoj 1731: [Usaco2005 dec]Layout 排队布局【差分约束】
差分约束裸题,用了比较蠢的方法,先dfs_spfa判负环,再bfs_spfa跑最短路 注意到"奶牛排在队伍中的顺序和它们的编号是相同的",所以\( d_i-d_{i-1}>= ...
随机推荐
- Spring-boot使用Ehcache配置
1.配置类 @Configuration @EnableCaching public class CacheConfiguration {// implements CachingConfigurer ...
- mfc非模态对话框
按照我们的之前的做法,先新建工程. 把基本的内容都添加上. 形成这样一个样子: 并且进行试运行,让程序能够完成加法运算. 值的注意的是,静态文本那里要改一下名字,否则无法将成员变量进行添加. 前期准备 ...
- How to use Oprofile tool to analysis program's performance
You can get Oprofile RPM from https://www.rpmfind.net/ How to use Oprofile tools: Get report Steps: ...
- 排序并获取index的顺序
//排序并获取index的顺序:4,7,2,9-->9,7,4,2-->4,2,1,3 Array.prototype.getIndex=function(){ var orderLeng ...
- CountDownLatch(闭锁)
一.闭锁(Latch) 闭锁(Latch):一种同步方法,可以延迟线程的进度直到线程到达某个终点状态.通俗的讲就是,一个闭锁相当于一扇大门,在大门打开之前所有线程都被阻断,一旦大门打开所有线程都 ...
- 自定义ListView适配器Adapter引用布局文件的情况下实现点击列表项时背景颜色为灰色
listview控件设置适配器的时候,如果使用自定义的adapter,比如MyArrayAdapter extends ArrayAdapter<String> 如果listitem布局文 ...
- RabbitMQ 原文译1.2--"Hello Word"
本系列文章均来自官网原文,属于个人翻译,如有雷同,权当个人归档,忽喷. .NET/C# RabbitMQ 客户端下载地址:https://github.com/rabbitmq/rabbitmq-do ...
- ASP.NET网络硬盘(文件上传,文件下载)
文件上传: 界面: 前台代码: <body style="text-align: center; background-image: url(Images/bg6.bmp);" ...
- js中的null与undefined
null undefined
- ACM——01排序
http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1024 01排序 时间限制(普通/Jav ...