【UOJ 281】排队布局

【题目描述】:

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

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

第一行读人三个整数N,ML,MD。

接下去ML行每行有三个正整数A,B,D(1<=A<B<=N),表示奶牛A和奶牛B至多相隔D的距离。

接下去MD行每行有三个正整数A,B,D(1<=A<B<=N),表示奶牛A和奶牛B至少相隔D的距离。 【输出描述】:

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

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

【样例输出】:

27

【样例说明】:

四只牛分别在0,7,10,27。 【时间限制、数据范围及描述】:

时间:1s 空间:64M

对于 30%的数据:2<=N<=50;1<=ML+MD<=300;

对于 50%的数据:2<=N<=200;1<=ML+MD<=1000;

对于100%的数据:2<=N<=1000;1<=ML+MD<=10,000;1<=L,D<=1,000,000

题解:模板题目啦啦,spfa再加上一点差分约束算法。恩代码如下

#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<cstdio>
using namespace std;
int n,ml,md;
struct Node{
    int u,v,w,next;
}a[10005];
int h[10005],c,ans;
int dis[10005],vis[10005];
int flag[10005],x,y,z;
void add(int u,int v,int w){
    a[++c].u=u; a[c].v=v;
    a[c].w=w;   a[c].next=h[u];
    h[u]=c;
}
int spfa(int s){
    int i,u;queue<int> q;
    memset(vis,0,sizeof(vis));
    memset(flag,0,sizeof(flag));
    memset(dis,0x3f,sizeof(dis));
    dis[s]=0; vis[s]=1;
    q.push(s);
    while(!q.empty()){
        u=q.front(); q.pop();
        vis[u]=0;
        for(int i=h[u];i;i=a[i].next){
            int v=a[i].v;
            if(dis[v]>dis[u]+a[i].w){
                dis[v]=dis[u]+a[i].w;
                if(!vis[v])
                  { vis[v]=1; flag[v]++; q.push(v); }
            }
            if(flag[v]==n) return -1;
        }
    }
    if(dis[n]==0x3f3f3f3f)
        return -2;
    return dis[n];
}
int main(){
    freopen("281.in","r",stdin);
    freopen("281.out","w",stdout);
    scanf("%d %d %d",&n,&ml,&md);

    for(int i=1;i<=ml;i++){
        scanf("%d %d %d",&x,&y,&z);
        add(x,y,z);
    }
    for(int i=1;i<=md;i++){
        scanf("%d%d%d",&x,&y,&z);
        add(y,x,-z);
    }
    printf("%d\n",spfa(1));
    return 0;
}

原文地址:https://www.cnblogs.com/wuhu-JJJ/p/11123479.html

时间: 2024-11-26 01:39:10

【UOJ 281】排队布局的相关文章

【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

Bzoj1731 排队布局

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

基于JS和JQuery实现的两种时钟效果(6)

数码管时钟-根据当前时间变化秒钟 在上一篇博文中实现了数码管时钟的布局,接下来我们就让数码管时钟动起来吧!在该篇博文中录的gif图像有点差强人意,望见谅. 项目文件: 实现根据当前时间变化秒钟的效果: 实现该效果的js代码: 1 <script type="text/javascript" src="js/jquery-3.4.1.slim.min.js" ></script> 2 <script type="text/jav

算法提高课——图论

图论难点:问题的转化和抽象(可看成特殊的某一类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和GridView去实现的,新建一个hot_item.xml,代码如下所示: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 android:ori

Android商城开发系列(十)—— 活动广告布局实现

在上一篇博客当中,我们讲了频道布局的实现,接下来我们讲解一下活动广告布局的实现,效果如下图: 这个是用viewpager去实现的,新建一个act_item.xml,代码如下所示: 1 <?xml version="1.0" encoding="utf-8"?> 2 <FrameLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 android

Android商城开发系列(十二)—— 首页推荐布局实现

首页新品推荐的布局效果如下图: 这块布局是使用LinearLayout和GridView去实现,新建recommend_item.xml,代码如下所示: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 android:orientation

【转】android布局属性详解

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

三行代码接入,社交软件打字时底下弹出的表情布局,自定义ViewPager+页面点标+各种功能的android小框架。

(转载请声明出处:http://www.cnblogs.com/linguanh/) 前言: 接上次分享的 ListView 动态加载类,入口:http://www.cnblogs.com/linguanh/p/4645115.html  这次分享给大家的是,刚些写好的类似社交软件打字时地下弹出的表情布局. 先看下我的默认效果图. 该效果图里面使用的图片资源,是默认的IC_lanucher,在我的类里面,你可以自定义,包括布局,几行几列,什么的,都可以自定义.底下的是小点标. 下集预告:我将在使