ABC273F Hammer 题解

news/2024/10/18 14:34:00/文章来源:https://www.cnblogs.com/sorato/p/18326905

ABC273F Hammer 题解

题目大意

数轴上有 \(n\) 个锤子和 \(n\) 堵墙,第 \(i\) 个锤子位于 \(x_i\),第 \(i\) 堵墙位于 \(y_i\),第 \(i\) 个锤子可以对应的敲开第 \(i\) 堵墙。以原点为起点,给定终点 \(t\),问最少移动多少个单位长度才能走到 \(t\)。必须拿到对应锤子敲开墙才能走过这堵墙。

Solve

考虑建图。对于一堵墙 \(y_i\),对于所有必须先经过这堵墙才能到达的点 \(u\),我们连一条从 \(y_i\)\(u\) 的有向边,意为限制必须先经过 \(y_i\) 才能到 \(u\)。然后再连一条从 \(x_i\)\(y_i\) 的有向边,意义同上。处理完之后再从原点向所有点连有向边。

先离散化,再在建出来的图上跑拓扑最长路即可,每条边的边权即为两端点位置之差。

至于为什么是最长路,由于图是在一个数轴上建出来的,比较特殊,所以一个点若受到多个点的约束,那么约束它的点之间一定也有约束关系,不会相互独立,所以更长的路一定包含更短的路的状态。意会一下。

Code

#include<bits/stdc++.h>
using namespace std;
inline int read()
{short f=1;int x=0;char c=getchar();while(c<'0'||c>'9')	{if(c=='-')	f=-1;c=getchar();}while(c>='0'&&c<='9')	x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}
const int N=1510,M=3010;
int n,s,t,x[N],y[N],k[M],ind[M],m;
long long f[M];
vector<int>e[M];
inline void topo()
{queue<int>q;q.push(s);while(!q.empty()){int u=q.front();q.pop();if(u==t)    break;for(int i:e[u]){f[i]=max(f[i],f[u]+abs(k[i]-k[u]));if(!--ind[i])	q.push(i);}}if(ind[t])	puts("-1");else	printf("%lld",f[t]);
}
signed main()
{n=read();t=read();m=(n<<1);for(int i=1;i<=n;i=-~i)	k[i]=x[i]=read();for(int i=1;i<=n;i=-~i)	k[i+n]=y[i]=read();k[m+1]=0;k[m+2]=t;sort(k+1,k+m+3);m=unique(k+1,k+m+3)-k-1;for(int i=1;i<=n;i=-~i)x[i]=lower_bound(k+1,k+m+1,x[i])-k,y[i]=lower_bound(k+1,k+m+1,y[i])-k;t=lower_bound(k+1,k+m+1,t)-k;s=lower_bound(k+1,k+m+1,0)-k;for(int i=1;i<=n;i=-~i){e[y[i]].push_back(x[i]);ind[x[i]]=-~ind[x[i]];if(x[i]>s)for(int j=x[i]+1;j<=m;j=-~j)e[x[i]].push_back(j),ind[j]=-~ind[j];elsefor(int j=1;j<x[i];j=-~j)e[x[i]].push_back(j),ind[j]=-~ind[j];}for(int i=1;i<=m;i=-~i)if(i!=s)	e[s].push_back(i),ind[i]=-~ind[i];return topo(),0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/772600.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一款.NET开源、跨平台的DASH/HLS/MSS下载工具

前言 今天大姚给大家分享一款.NET开源(MIT License)、免费、跨平台的DASH/HLS/MSS下载工具,并且支持点播和直播(DASH/HLS)的内容下载:N_m3u8DL-RE。 网络流媒体传输协议介绍 DASH DASH是一种基于HTTP的自适应流媒体网络传输协议,它允许流媒体内容以多个编码和比特率的形…

计算机组成与体系结构-主存编址

主存 存储器的基本单位是存储单元 一般以8位二进制(bit位)为一个存储单元(Byte 字节) 每个存储单元都有一个地址,一般用十六进制 数表示主存编址 编址 给每个单元赋予一个地址码,就叫编址。经编址后,存储器在逻辑上便构成一个线性地址空间。编址可以按字 或 字节编址 寻址 存…

gpu的独立显卡直连方法--拯救者Y7000p

先选右上角 然后点一下显示模式 选择独立显卡然后重启

Mac版pycharm--金刚钻

安装包从官网下载安装即可。 【转】破解工具下载 https://ziby0nwxdov.feishu.cn/docx/IFcOdsC55oENfFxh9racgpb8n19 下载后Mac版本文件夹包含:Mac系统的pycharm激活 1、先打开终端 2、运行uninstall.sh 该步骤的作用是清除之前激活过留下的东西,防止激活失败。 出现done说…

Diffusion|DDPM 理解、数学、代码

Diffusion论文:Denoising Diffusion Probabilistic Models参考博客open in new window;参考 paddle 版本代码: aistudio 实践链接open in new window该文章主要对 DDPM 论文中的公式进行小白推导,并根据 ppdiffuser 进行 DDPM 探索。读者能够对论文中的大部分公式如何得来,…

c中int型和浮点型的格式话输出

001、[root@PC1 test]# ls test.c [root@PC1 test]# cat test.c // 测试程序 #include <stdio.h>int main(void) {int i = 10;printf("i1 = %d\n", i);printf("i2 = %f\n", i);return 0; } [root@PC1 test]# gcc test.c -o kkk …

虚拟环境的jupter notebook 版本升级问题

1、进入虚拟环境,且查看资源列表 2、升级为7.0版本 pip install --upgrade notebook==7.0.0 ...... 3、查看notebook版本 pip show notebook 4、重启 jupter notebook(虚拟环境下的) 如果出现闪退可以卸载:pip uninstall notebook 然后重新安装新的版本或回退到原来版本

Diffusion|DDIM 理解、数学、代码

DIFFUSION系列笔记|DDIM 数学、思考与 ppdiffuser 代码探索 论文:DENOISING DIFFUSION IMPLICIT MODELS 该 notebook 主要对 DDIM 论文中的公式进行小白推导,同时笔者将使用 ppdiffusers 中的 DDIM 与 DDPM 探索两者之间的联系。读者能够对论文中的大部分公式如何得来,用在了…

gitlab 服务搭建小记

gitlab 内网服务搭建小记给团队搭建一个内网 gitlab 服务 准备工作 docker 准备好 docker 环境,如果 docker 不能用,可以参考 一个视频解决Docker安装, Pull, 找镜像等难题 Docker停服怎么办?Docker镜像无法拉取_哔哩哔哩_bilibili docker 安装 gitlab // 拉取镜像 docker i…

不是,大哥,咱这小门小户的,别搞我CDN流量啊

CDN流量被刷?如何应对?分享是最有效的学习方式。 博客:https://blog.ktdaddy.com/最近遇上事儿了,老猫的小小博客网站【程序员老猫的博客】被人盗刷CDN流量了。开始的时候收到了欠费的短信也没有怎么去重视。虽然说费用没有多少,但是也是一个教训。博客从最初地搭建到现在…

VM CentOS7-2009 固定IP地址(系统工具-设置-网络)

1、配置VM 1)、【虚拟网络编辑器】2)、配置DHCP 修改IP地址范围和租用时间 3)、NAT设置注:Centos配置网关:192.168.177.2 2、配置centos的IPV43、主机192.168.177.128 ----》 ifconfig

Team center表格开发样例 --转自PLMCode

第一步:分别在自己的模块下的html、viewmodel、js文件夹下,加入下列三个文件simpleTableTestPageTableView.html、simpleTableTestPageTableViewModel.json、simpleTableTestPageService.js 第二步:simpleTableTestPageTableView.html <aw-splm-table gridid="examp…