Bzoj1731 排队布局

当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近些。FJ 有 N 头奶牛,编号从 1 到 N,沿一条直线站着等候喂食。奶牛排在队伍中的顺序和它们的编号是相同的。因为奶牛相当苗条,所以可能有两头或者更多奶牛站在同一位置上。即使说,如果我们想象奶牛是站在一条数轴上的话,允许有两头或更多奶牛拥有相同的横坐标。一些奶牛相互间存有好感,它们希望两者之间的距离不超过一个给定的数 L。另一方面,一些奶牛相互间非常反感,它们希望两者间的距离不小于一个给定的数 D。
给出 ML条关于两头奶牛间有好感的描述,再给出 MD条关于两头奶牛间存有反感的描述。你的工作是:如果不存在满足要求的方案,输出 −1;如果 1 号奶牛和 N号奶牛间的距离可以任意大,输出 −2;否则,计算出在满足所有要求的情况下,1 号奶牛和 N 号奶牛间可能的最大距离。



很显然,我们对于两个要在一起的情况,相当于想这两个点之间添加一条长度相应的边,使得在没有更短路的时候可以走这条

然后对于分开的则是添加一条负权边

典型的差分约束

特别的,相邻的两个牛之间之间添加一条距离为0的边

下面给出代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cmath>
using namespace std;
inline int rd(){
    int x=0,f=1;
    char ch=getchar();
    for(;!isdigit(ch);ch=getchar()) if(ch==‘-‘) f=-1;
    for(;isdigit(ch);ch=getchar()) x=x*10+ch-‘0‘;
    return x*f;
}
inline void write(int x){
    if(x<0) putchar(‘-‘),x=-x;
    if(x>9) write(x/10);
    putchar(x%10+‘0‘);
    return ;
}
int n,m1,m2;
int head[100006],nxt[100006],to[100006];
int v[100006];
int total=0;
void add(int x,int y,int z){
    total++;
    to[total]=y;
    v[total]=z;
    nxt[total]=head[x];
    head[x]=total;
    return ;
}
int q[100006];
int l=0,r=0;
int book[100006];
int dis[100006];
int cnt[100006];
int f=0;
void spfa(){
    memset(dis,127,sizeof(dis));
    dis[1]=0;
    book[1]=1;
    q[++r]=1;
    while(l<r){
        int x=q[++l];
        book[x]=0;
        for(int e=head[x];e;e=nxt[e]){
            if(dis[to[e]]>dis[x]+v[e]){
                dis[to[e]]=dis[x]+v[e];
                cnt[x]++;
                if(cnt[x]==n){
                    f=1;
                    return ;
                }
                if(!book[to[e]]){
                    book[to[e]]=1;
                    q[++r]=to[e];
                }
            }
        }
    }
    return ;
}
int main(){
    n=rd(),m1=rd(),m2=rd();
    for(int i=1;i<=m1;i++){
        int x=rd(),y=rd(),z=rd();
        add(x,y,z);
    }
    for(int i=1;i<=m2;i++){
        int x=rd(),y=rd(),z=rd();
        add(y,x,-z);
    }
    for(int i=2;i<=n;i++) add(i,i-1,0);
    spfa();
    if(f) printf("-1");
    else if(dis[n]==2139062143) printf("-2");
    else write(dis[n]);
    return 0;
}

原文地址:https://www.cnblogs.com/WWHHTT/p/9861393.html

时间: 2024-11-09 22:11:54

Bzoj1731 排队布局的相关文章

【bzoj1731】Layout 排队布局

1731: [Usaco2005 dec]Layout 排队布局 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 868  Solved: 495[Submit][Status][Discuss] Description Like everyone else, cows like to stand close to their friends when queuing for feed. FJ has N (2 <= N <= 1,000) cows

【UOJ 281】排队布局

[题目描述]: 当排队等候喂食时,奶牛喜欢和它们的朋友靠近些.FJ 有N头奶牛,编号从1到N,沿一条直线站着等候喂食.奶牛排在队伍中的顺序和它们的编号是相同的.因为奶牛相当苗条,所以可能有两头或者更多奶牛站在同一位置上.如果我们想象奶牛是站在一条数轴上的话,允许有两头或更多奶牛拥有相同的横坐标.一些奶牛相互间存有好感,它们希望两者之间的距离不超过一个给定的数L.另一方面,一些奶牛相互间非常反感,它们希望两者间的距离不小于一个给定的数D.给出ML条关于两头奶牛间有好感的描述,再给出MD条关于两头奶

算法提高课——图论

图论难点:问题的转化和抽象(可看成特殊的某一类DP) 图论与DP的联系: DP问题(从集合角度分析最优化问题)可以看成从F(0,0).F(0,1).F(1,2)......F(0,m)到F(n,m)的最长路.因此DP问题可以转化为拓扑图(一般DP问题的状态间无环)上的最短(长)路. 当DP依赖关系不具有拓扑序时(即存在环时),可以将其转化为最短路,也可以用高斯消元. //TLE的原因常常是没有memsert //st数组在不同算法中的用法: 单源最短路的建图方式 AcWing 1129. 热浪

【转】android布局属性详解

LinearLayout布局: 线性版面配置,在这个标签中,所有元件都是按由上到下的排队排成的.在这个界面中,我们应用了一个 LinearLayout的布局,它是垂直向下扩展的 ,所以创建的布局XML文件,以<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="

2015年BAT在线医疗大战开局,抢先布局的百度能否拔得头筹?

近两年在线医疗领域火爆异常,玩得好的创业公司获得资本青睐,也引发了BAT三巨头的疯狂角逐.从百度健康云.腾讯微信医疗到阿里"未来医院",三家都希望争食甚至引领这个万亿大市场的互联网变革. 这个趋势在2014年越发明显,BAT三家几乎都抛出了正式战略,在市场上掀起不少腥风血雨.而进入2015年,百度的动作更快些,先是牵手301医院.又推出百度医生App,直到近日正式与与卫计委达成战略合作,成为其新医改宣传官方平台而再获国家权威部门背书,声势极其浩荡.当然,无论是阿里还是腾讯,显然不会将偌

从零开始学习html(十二)CSS布局模型——下

五.什么是层模型? 什么是层布局模型?层布局模型就像是图像软件PhotoShop中非常流行的图层编辑功能一样, 每个图层能够精确定位操作,但在网页设计领域,由于网页大小的活动性,层布局没能受到热捧. 但是在网页上局部使用层布局还是有其方便之处的.下面我们来学习一下html中的层布局. 如何让html元素在网页中精确定位,就像图像软件PhotoShop中的图层一样可以对每个图层能够精确定位操作. CSS定义了一组定位(positioning)属性来支持层布局模型. 层模型有三种形式: 1.绝对定位

Android学习(四)——Android布局模式

除了上面我们谈过的控件外,其实还有非常多其他的.我们谈的基本都是非常基础的,因此其他的控件还需要学习者在后面制作中进行学习.除了这些组件外,我们还需要有一些东西把这些组件包含在内,这东西就是我们所说的布局. Android中有四种基本的布局模式(Layout):LinearLayout, RelativeLayout, TableLayout, FrameLayout  ———————————————————华丽丽的分割线—————————————————————— 1. LinearLayou

摇一摇成活动O2O必杀器,看巨头们如何布局

对于各种活动,可能很多人都不会忘记每次活动中最重要的环节:抽奖.不过自从今年春晚微信“摇一摇”红包引爆疯抢之后,摇一摇就开始逐渐成为了各种演唱会.电视节目.娱乐活动以及线下商家活动的必杀器.那么,摇一摇究竟有着什么魅力,会吸引如此众多的线下活动为其倾倒? 从技术的角度来看,摇一摇是基于ibeacon技术(Ibeacon是苹果公司2013年7月推出的技术,并在9月发布的移动设备上配备了此新功能:通过蓝牙(BLE)进行精准定位,当智能设备靠近iBeacon信标时,设备能感应到iBeacon信号),它

java布局学习 (一)

Java 程序通过jvm可以很好的移植到其他平台上,但是java 生成的图形界面样式,在不使用布局的情况下,往往需要重新设定大小,才能在新的平台上调整到最佳样式.这是由于组件的最佳大小 往往是与平台相关的.不同平台上,相同的内容大小可能不一样.java专门提供了LayoutManager(布局管理器)来更好的进行布局管理,使组件的大小和位置调整到最佳.(包括控件无遮挡,无冗余空间). (一) 再开始讲解布局之前,这里先普及一下关于布局中的一些常用知识. 1.容器 Container 做过图形界面