House Man 【HDU - 3440】【差分约束】

2023-11-04

题目链接


  就是我们必须跳N-1次,从最小的房子跳到最高的房子,然后呢,求最小的房子和最高的房子之间的最长的可能距离。那么就是差分约束咯。

  我们可以这么推,首先,对于所有的点,a[i] - a[i-1] >= 1,那么转换一下,就是a[i-1] - a[i] <= -1,然后看到之后的N-1步跳,每次都是跳到那个刚好比它大的那个房子上面,所以有a[x] - a[y] <= D,x、y分别代表了序号大的和序号小的,这两个之间的距离是"≤D"的。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define efs 1e-6
#define INF 0x3f3f3f3f
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
#define MAX_3(a, b, c) max(max(a, b), c)
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int maxN = 1e3 + 7, maxE = 1e4 + 7;
int N, D, cnt, head[maxN], dist[maxN], used[maxN];
struct node
{
    int val, id;
}a[maxN];
inline bool cmp(node e1, node e2) { return e1.val < e2.val; }
struct Eddge
{
    int nex, to, val;
    Eddge(int a=-1, int b=0, int c=0):nex(a), to(b), val(c) {}
}edge[maxE];
inline void addEddge(int u, int v, int w)
{
    edge[cnt] = Eddge(head[u], v, w);
    head[u] = cnt++;
}
queue<int> Q;
bool inque[maxN];
inline int spfa(int st, int ed)
{
    memset(inque, false, sizeof(inque));
    memset(dist, INF, sizeof(dist)); memset(used, 0, sizeof(used));
    dist[st] = 0;
    while(!Q.empty()) Q.pop();
    Q.push(st); inque[st] = true; used[st]++;
    while(!Q.empty())
    {
        int u = Q.front(); Q.pop(); inque[u] = false;
        for(int i=head[u], v, w; ~i; i=edge[i].nex)
        {
            v = edge[i].to; w = edge[i].val;
            if(dist[v] > dist[u] + w)
            {
                dist[v] = dist[u] + w;
                if(!inque[v])
                {
                    if(++used[v] >= N) return -1;
                    inque[v] = true;
                    Q.push(v);
                }
            }
        }
    }
    return dist[ed];
}
inline void init()
{
    cnt = 0;
    memset(head, -1, sizeof(head));
}
int main()
{
    int T; scanf("%d", &T);
    for(int Cas=1; Cas<=T; Cas++)
    {
        scanf("%d%d", &N, &D);
        init();
        for(int i=1; i<=N; i++)
        {
            if(i > 1) addEddge(i, i-1, -1);
            scanf("%d", &a[i].val);
            a[i].id = i;
        }
        sort(a + 1, a + N + 1, cmp);
        for(int i=2, x1, x2; i<=N; i++)
        {
            x1 = a[i-1].id; x2 = a[i].id;
            if(x1 > x2) swap(x1, x2);
            addEddge(x1, x2, D);
        }
        if(a[1].id > a[N].id) swap(a[1].id, a[N].id);
        printf("Case %d: %d\n", Cas, spfa(a[1].id, a[N].id));
    }
    return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

House Man 【HDU - 3440】【差分约束】 的相关文章

  • Connections between cities 【HDU - 2874】【在线LCA算法】

    题目链接 昨天刚学了在线LCA 今天就来硬刚这道题还是花了一整天的时间 不过对于LCA却有了更多的理解 这道题在讲述不同根的做法上尤其是很好的 题目告诉我们有N个节点和M条边 以及C次询问 每次查询的是 L R 这两个节点间的距离 还是算得
  • 图论感想

    图论基础无非也就是图存储 遍历 有向图无向图的连通性 分为图联通和联通分量 有向图为强联通分量 割点与割边 本人目前还没有看网络流内容 只是大致知道是什么 觉得也是图论一部分 个人认为学东西应该大体了解一下所学内容 每学一个必要好好思考 最
  • hdu 2586 How far away ?

    Problem acm hdu edu cn showproblem php pid 2586 Meaning 给一棵 n 个点的树 和 n 1 条边的边权 多次询问树上两点的距离 Analysis 以任意顶点为根 DFS 预处理出所有结点
  • [STL]vector常见用法详解

    目录 引入 常见用法介绍 1 vector的定义 2 vector容器内元素的访问 3 vector常用函数实例解析 1 push back 2 pop back 3 size 4 clear 5 insert 6 erase vector
  • Road Construction POJ - 3352(tarjan双连通缩点模板)

    题目描述 给一个无向连通图 至少添加几条边使得去掉图中任意一条边不改变图的连通性 即使得它变为边双连通图 include
  • 数据结构 图的应用

    文章目录 生成树 定义 性质 带权图的最小生成树 最小生成树的生成规则 最小生成树 Kruskal算法 步骤 最小生成树 Prim算法 步骤 最短路径 非负权值的单源最短路径 Dijkstra算法 目的 算法 存储空间 算法步骤 算法实现
  • 2021级新生个人训练赛第38场

    问题 A chicken 题目描述 小 x 非常喜欢小鸡翅 他得知 NSC 超市为了吸引顾客 举行了如下的活动 一旦有顾客在其他超市找到更便宜的小鸡翅 NSC 超市将免费送给顾客 1000g 小鸡翅 小 x 为了尽可能的省钱 走遍了各大超市
  • Financial Crisis【点双连通分量】

    题目链接 HDU 3749 你以为学了Tarjan会写几个边双就真的理解什么是双连通分量了吗 我原来真的不懂什么叫做点双BCC 不过这都没有关系 解决了这个问题之后 我终于知道了什么叫做点双连通分量了 这是一个绝对绝对经典的问题 首先讲一下
  • The Stable Marriage Problem 【HDU - 1914】【稳定婚姻匹配问题】

    题目链接 Problem Description The stable marriage problem consists of matching members of two different sets according to the
  • POJ 3259 Wormholes(最短路——Bellman-ford)

    A Wormholes While exploring his many farms Farmer John has discovered a number of amazing wormholes A wormhole is very p
  • 迪杰斯特拉算法浅析

    所谓的迪杰斯特拉算法 就是一个用来求一个图中某点到其它点的最短路径的算法 大致方法 遍历所有节点 找到离起点最近的一个点 那么这个点到起点的最小距离肯定是起点到这个点的这条边的权值 然后标记这个点被使用过了 以1中的那个点为中继 更新其它节
  • [NOI 2015复习][BZOJ 1509][NOI 2003]逃学的小孩(树的直径)

    题目链接 http www lydsy com JudgeOnline problem php id 1509 题目大意 要从一棵树中找出三个点 X Y Z X Y Z 使得 min dis A C dis B C dis A B min
  • King's Quest【POJ 1904】【Tarjan强连通分量】

    Once upon a time there lived a king and he had N sons And there were N beautiful girls in the kingdom and the king knew
  • Codeforces Round #751 (Div. 2) D. Frog Traveler(BFS)

    题解 因为我们最多把所有的点跳一遍么 所以直接BFS模拟一下就行了 注意现在跳的点不能是以前已经跳过的点 并且只能越跳越高 否则没有意义 这样就保证了时间复杂度是线性的 AC代码 include
  • Fix a Tree【Codeforces 699 D】【dfs + 树的性质】

    Codeforces Round 363 Div 2 D 题意 有N个点 每个点i都有一个父节点p i 如果 i p i 则是说明i结点是根结点 现在我们给出这样的1 N的p i 这可能是不合法的 问 我们应该最少改变多少个使它变成一棵合法
  • Summer Holiday HDU - 1827 强连通分量+缩点

    To see a World in a Grain of Sand And a Heaven in a Wild Flower Hold Infinity in the palm of your hand And Eternity in a
  • How far away ? 【HDU - 2586】【DFS+链式前向星优化】

    题目链接 其实这道题可以不用链式前向星优化换做vector lt gt 也是可以跑的 只是会许会慢些而已 来换个中文题意好读些 勇气小镇是一个有着n个房屋的小镇 为什么把它叫做勇气小镇呢 这个故事就要从勇气小镇成立的那天说起了 修建小镇的时
  • 1345:香甜的黄油(Dijkstra)---信息学奥赛一本通

    题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法 糖 把糖放在一片牧场上 他知道N 1 N 500 只奶牛会过来舔它 这样就能做出能卖好价钱的超甜黄油 当然 他将付出额外的费用在奶牛上 农夫John很狡猾 像以前的巴甫洛夫 他知道
  • 讲解 最大流问题+最小花费问题+python(ortool库)实现

    文章目录 基本概念 图 邻接矩阵 最大流问题 python解决最大流问题 python解决最大流最小费用问题 喜欢的话请关注我们的微信公众号 你好世界炼丹师 公众号主要讲统计学 数据科学 机器学习 深度学习 以及一些参加Kaggle竞赛的经
  • E (1052) : DS树--带权路径和

    文章目录 一 题目描述 二 输入与输出 1 输入 2 输出 三 参考代码 一 题目描述 计算一棵二叉树的带权路径总和 即求赫夫曼树的带权路径和 已知一棵二叉树的叶子权值 该二叉树的带权路径和APL等于叶子权值乘以根节点到叶子的分支数 然后求

随机推荐

  • 《CenterMask:Real-Time Anchor-Free Instance Segmentation》论文笔记

    代码地址 CenterMask 1 概述 导读 在这篇文章提出的新instance分割方法是基于FCOS的 首先 文章在FOCS的box检测的基础上通过添加一个SAG Mask spatial attention guided mask 分
  • Nginx 核心模块与配置实践

    Nginx 安装与普通演示 pcre 8 35 tar gz nginx 1 6 2 tar gz 环境安装 yum y install make zlib zlib devel gcc c libtool openssl openssl
  • 四、随机访问(IOPS)性能测试

    我们先来看看随机读应用的特点 在队列深度为1时 相当于单线程访问 此时的IOPS基本相当于单块硬盘每秒钟的寻道 等待次数 即平均访问时间的倒数 当队列深度不断增加 每块硬盘的NCQ 本地命令排队 功能和硬盘的数量开始发挥作用 队列深度达到2
  • [安全攻防进阶篇] 八.那些年的熊猫烧香及PE病毒行为机理分析

    如果你想成为一名逆向分析或恶意代码检测工程师 或者对系统安全非常感兴趣 就必须要认真分析一些恶意样本 熊猫烧香病毒就是一款非常具有代表性的病毒 当年造成了非常大的影响 并且也有一定技术手段 本文将详细讲解熊猫烧香的行为机理 并通过软件对其功
  • 【蓝桥杯】第十三届蓝桥杯省赛 AK 攻略 —— C++ B组全真题超详细剖析

    目录 写在前面 A题 九进制转十进制 题目描述 解题思路 代码编写 B题 顺子日期 题目描述 解题思路 代码编写 C题 刷题统计 题目描述 解题思路 代码编写 D题 修剪灌木 题目描述 解题思路 代码编写 E题 X进制减法 题目描述 解题思
  • PyQt5中的lambda表达式的使用

    一般我们在PyQt5中使用按钮的点击事件一般是以下这种写法 self button clicked connect self btnClick 但是当需要传递参数时 就傻眼了 此时就用到了我们的标题lambda表达式 self button
  • JavaScript从键盘输入三个整数分别存入变量,从小到大进行排序

    键盘输入prompt prompt 方法用于显示可提示用户进行输入的对话框 这个方法返回用户输入的字符串 所以对输入的数字要进行类型转换 var num1 prompt 请输入第一个数 var num2 prompt 请输入第二个数 var
  • AI与大数据的关系

    最近在忙着专业分流的事情 自己纠结的专业主要就是人工智能和大数据 找了很多资料 终于整理出二者的关系 原文地址 https www sohu com a 224177824 764294 更专业一些的分析可以看这篇文章 https blog
  • 校园网开热点显示无Internet连接和360免费WiFi猎豹WiFi冲突解决办法

    校园网开不了热点或者用360免费WiFi发生冲突 问题 校园网 连接后有网络显示无Internet连接 也开不了热点 解决方法 方法一 使用像360免费WiFi类的软件进行开热点 同时你需要开启校园网模式 开启校园网模式 校园网模式可以避免
  • 与fo论禅汇总

    与佛论禅网络上现在共包含三个版本 与佛论禅 与佛论禅 与佛论禅重制版 与佛论禅重制版 Takuron 新与佛论禅 新约佛论禅 佛曰加密 PcMoe 有几个注意点 1 别拿百度引擎 翻墙拿谷歌 2 三个网站的使用逻辑不同 加密解密的输入框不一
  • Zookeeper已经分布式环境中的假死脑裂

    Zookeeper简介 在上班之前都不知道有这样一个东西 在开始说假死脑裂之前先说说Zookeeper吧 Zookeeper zookeeper是一个分布式应用程序的协调服务 它是一个为分布式应用提供一致性服务的软件 提供的性能包括 配置维
  • 基本数据类型强制转换问题-值的截断和内存的截断

    1 double a1 22 32 int b1 int a1 2 double a2 2 5e20 int b2 int a2 按照浮点数到整数的转换语义 结果应该截去浮点数的小数部分 而保留整数部分 所以b1应该为22 而b2则超出了其
  • 刷脸支付可针对客户做二次营销活动

    随着智能手机和WIFI的普及 80 的顾客都不再拿钱包 而是掏出手机付款 大到商店小到早点摊菜市场 只要拿出手机轻轻一扫 便可以完成整个购买流程 而如今 支付4 0时代已经到来 基于生物识别技术 不用手机 万物可付 李嘉诚说 当一项新鲜事物
  • MySQL高级篇-第06章_索引的数据结构

    1 为什么使用索引 索引是存储引擎用于快速找到数据记录的一种数据结构 就好比一本数课书的目录部分 通过目录中找到对应文章的页码 便可快速定位到需要的文章 MySQL中也是一样的道理 进行数据查找时 首先查看查询条件是否命中某条索引 符合则通
  • 找第一个只出现一次的字符c++

    找第一个只出现一次的字符 提交数 3563 通过率 43 14 平均分 61 55 题目描述 给定一个只包含小写字母的字符串 请你找到第一个仅出现一次的字符 如果没有 输出no 输入格式 一个字符串 长度小于100000 输出格式 输出第一
  • rabbitmq初学之连接测试

    最近在搞接口 需要用到rabbitmq 在公司搞了一个下午还是连接不上 后来细看了英文说明 测试连接成功 得出如下报错几点 我用的安装包 otp win64 17 0 exe erlang vm 和rabbitmq server 3 3 1
  • 消息队列-kafka入门详解

    本文适用于初学者 学习kafka之前 应该都知道它是消息队列 但是和我们印象中数据结构的队列不同的是 它持久化到磁盘上 1 我们首先从定义来看 Kafka 一个分布式的 分区化 可复制提交的日志服务 我们先来想想什么是分区 好比图书馆的书
  • pcb过孔与电流对照一览表_PCB设计项目能不能成功,这个因素占了30%

    电源平面的处理 在PCB设计中占有很重要的地位 在一个完整的设计项目中 通常电源的处理决定项目的30 50 的成功率 本次给大家介绍在PCB设计过程中电源平面处理应该考虑的基本要素 1 做电源处理时 首先应该考虑其载流能力 其中包含2个方面
  • QT-通用的软件界面框架,好看且实用

    QT 通用的软件界面框架 好看且实用 前言 一 演示效果 二 配置说明 三 关键程序 四 程序下载 前言 常规软件开发 使用这种界面框架 基本是可以做很多个常规项目 比较有参考意义 本次软件使用开发的环境是QT5 13 2 VS2017 不
  • House Man 【HDU - 3440】【差分约束】

    题目链接 就是我们必须跳N 1次 从最小的房子跳到最高的房子 然后呢 求最小的房子和最高的房子之间的最长的可能距离 那么就是差分约束咯 我们可以这么推 首先 对于所有的点 a i a i 1 gt 1 那么转换一下 就是a i 1 a i