BZOJ 2143 飞飞侠 (最短路变形)

BZOJ 2143 飞飞侠(线段树优化建边 / 并查集优化最短路)【BZOJ修复工程】 【BZOJ修复计划 #12】BZOJ 2143 飞飞侠 【国家集训队2011】 阅读详情

Description:
 飞飞国是一个传说中的国度,国家的居民叫做飞飞侠。飞飞国是一个N×M的矩形方阵,每个格子代表一个街区。然而飞飞国是没有交通工具的。飞飞侠完全靠地面的弹射装置来移动。每个街区都装有弹射装置。使用弹射装置是需要支付一定费用的。而且每个弹射装置都有自己的弹射能力。我们设第i行第j列的弹射装置有Aij的费用和Bij的弹射能力。并规定有相邻边的格子间距离是1。那么,任何飞飞侠都只需要在(i,j)支付Aij的费用就可以任意选择弹到距离不超过Bij的位置了。如下图 (从红色街区交费以后可以跳到周围的任意蓝色街区。)
 这里写图片描述
 现在的问题很简单。有三个飞飞侠,分别叫做X,Y,Z。现在它们决定聚在一起玩,于是想往其中一人的位置集合。告诉你3个飞飞侠的坐标,求往哪里集合大家需要花的费用总和最低。

Input:
 输入的第一行包含两个整数N和M,分别表示行数和列数。接下来是2个N×M的自然数矩阵,为Aij和Bij 最后一行六个数,分别代表X,Y,Z所在地的行号和列号。

Output:
  第一行输出一个字符X、Y或者Z。表示最优集合地点。第二行输出一个整数,表示最小费用。如果无法集合,只输出一行NO

Sample Input:
4 4
0 0 0 0
1 2 2 0
0 2 2 1
0 0 0 0
5 5 5 5
5 5 5 5
5 5 5 5
5 5 5 5
2 1 3 4 2 2

Sample Output:
Z
15

数据范围:
1<=N,M<=200,0<=Bi<=109,0<=Ai<=1000;

题解:
 首先这肯定是一道最短路的题;
 但是由于数据范围的限制,直接建边是不可能的;
 我们考虑这道题的特殊性,将弹射距离,转化为在地图中可以走这么多步,而不消耗费用。所以我们考虑用 dis[ i ][ j ][ k ]表示在(i , j)这个点,当前还能走K步的最小代价,就避免了建边,从而得到答案。

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<ctime>
#include<iomanip>
#include<iostream>
#include<cctype>
#include<queue>
using namespace std;
const int INF = 100000000;
const int N = 205;
const int dx[4]={0,-1,0,1},dy[4]={-1,0,1,0};
int len,n,m,x1,x2,x3,yy1,y2,y3,t1,t2,t3;
int a[N][N],b[N][N],dis[N][N][N*2];
bool vis[N][N][N*2];
struct node{int x,y,z,d;};
bool operator <(const node&a,const node&b){ return a.d>b.d;}
inline int Readint(){
    int i=0;char c;
    for(c=getchar();!isdigit(c);c=getchar());
    for(;isdigit(c);c=getchar()) i=(i<<1)+(i<<3)+c-'0';
    return i;
}

inline void solve(int sx,int sy){
    priority_queue< node >  q;
    for(int i=1;i<=n;i++)
      for(int j=1;j<=m;j++)
        for(int k=0;k<=len;k++)
          dis[i][j][k]=INF,vis[i][j][k]=0;
    dis[sx][sy][0]=0;
    node u,v;u.x=sx;u.y=sy;u.z=u.d=0;q.push(u);
    while(!q.empty() && !(vis[x1][yy1][0] && vis[x2][y2][0] && vis[x3][y3][0])){
        u=q.top();q.pop();
        if(vis[u.x][u.y][u.z]) continue;vis[u.x][u.y][u.z]=true;
        if(u.z){
            for(int k=0;k<4;k++){
                int fx=u.x+dx[k];int fy=u.y+dy[k];
                if(fx>0&&fx<=n&&fy>0&&fy<=m&&u.d<dis[fx][fy][u.z-1]){
                    dis[fx][fy][u.z-1]=v.d=u.d;
                    v.x=fx;v.y=fy;v.z=u.z-1;q.push(v);
                }
            }
            v=u;v.z--;
            if (v.d<dis[v.x][v.y][v.z]){ dis[v.x][v.y][v.z]=v.d; q.push(v); }
        }
        else{
            v=u;v.z=a[v.x][v.y];v.d+=b[v.x][v.y];
            if(v.d<dis[v.x][v.y][v.z]) dis[v.x][v.y][v.z]=v.d,q.push(v); 
        }
    }
}

int main(){
    //freopen("lx.in","r",stdin);

    n=Readint(),m=Readint();
    for(int i=1;i<=n;i++)
      for(int j=1;j<=m;j++){
        a[i][j]=Readint();a[i][j]=min(a[i][j],max(i-1,n-i)+max(j-1,m-j)+1);
        len=max(len,a[i][j]);
      }
    for(int i=1;i<=n;i++)
      for(int j=1;j<=m;j++) b[i][j]=Readint();
    x1=Readint(),yy1=Readint(),x2=Readint(),y2=Readint(),x3=Readint(),y3=Readint();
    solve(x1,yy1);t2+=dis[x2][y2][0];t3+=dis[x3][y3][0];
    solve(x2,y2);t1+=dis[x1][yy1][0];t3+=dis[x3][y3][0];
    solve(x3,y3);t1+=dis[x1][yy1][0];t2+=dis[x2][y2][0];
    int ans=min(t1,min(t2,t3));
    if(ans<INF){
        puts((ans==t1)?"X":(ans==t2)?"Y":"Z");
        cout<<ans;
    }else puts("NO");
}
【Bug已解决】Codex CLI 报错 apply_patch 失败:无法应用补丁的解决方案 方案适用场景推荐指数统一换行符规范跨平台协作项目的标准配置⭐⭐⭐⭐⭐关闭自动格式化冲突IDE 与 Codex 并发编辑同一文件⭐⭐⭐⭐缩小任务改动范围长期有效的使用习惯优化⭐⭐⭐⭐⭐统一 UTF-8 编码涉及非 UTF-8 遗留文件的项目⭐⭐⭐提示重新读取文件单次失败后的快速恢复方式⭐⭐⭐⭐报错的本质是Codex 生成补丁时读取的文件内容,与实际应用补丁时磁盘上的文件内容出现了不一致,常见诱因包括换行符风格混用、文件被其他工具并发修改、编码问题等。 阅读详情

相关推荐

LLM - windows下的Dify离线部署:从镜像打包到无网环境部署(亲测,包含插件部署)

LLM - windows下的Dify离线部署:从镜像打包到无网环境部署(亲测,包含插件部署)

ocean00008899的博客 1285

BZOJ2143 飞飞侠 最短路

题意:(这题没图不好说……大家还是自己去看吧) 题解: 首先有一点需要注意,就是题面中a和b数组搞混了…… 像势能分析那样,我们每花费一定金额b[i][j]就相当于得到了a[i][j]的势能,这样我们建图,图中每一个点均由花费(边权)、横纵坐标、势能四个量决定,显然转移的时候有: 势能==0:向下一个点转移时加上b[i][j],势能=a[i][j] 势能!=0:每次只往上下左右...

a18700013354的博客 159

【Ragflow】9.问答为什么比搜索响应慢?从源码角度深入分析

前几天看到有群友提到一个现象:Ragflow的搜索界面的问答速度很快,但聊天界面的问答速度很慢,究竟是什么原因?在深入挖掘源码之后,逐渐发现了问题的答案。

兴趣使然的创作者 2902

BZOJ 2143 飞飞侠

2143: 飞飞侠 Time Limit:50 SecMemory Limit:259 MBSubmit:1099Solved:383[Submit][Status][Discuss] Description 飞飞国是一个传说中的国度,国家的居民叫做飞飞侠。飞飞国是一个N×M的矩形方阵,每个格子代表一个街区。然而飞飞国是没有交通工具的。飞飞侠完全靠地面的弹射...

191

Discuz IIS上传附件大于28M失败报错Upload Failed.修改maxAllowedContentLength(图文教程)

下图:Discuz X3.5的系统信息,上传许可为1024MB(1GB)论坛为局域网论坛,仅供内部同事交流使用!使用官方最新的Discuz! X3.5 Release 20231221 UTF-8 下图:选择上传附件(提示可以最大上传100M) 下图:模拟上传84M的文件(

骚团长的博客 1828

【电磁场与电磁波课程设计】基于HFSS的双频微带天线仿真及设计

第五代移动通信技术(5G)的商用已经近在眼前,作为移动通信中最为重要的功能组件,面向5G通信应用的手机天线与基站天线的技术研究与设计成为近年来的热点。随着移动通信中“跳频”“扩频”等通信技术发展,为了满足与多个终端的通信要求,实现多系统共用和收发共用等功能,这就要求天线在不同频段下工作。根据国家工信部的最新规定,5G移动通信的中频段被划定在3.3 GHz-3.5 GHz及4.8 GHz-5.0 GH,面向5G移动通信的天线应具有高增益、小型化、宽频段及高隔离度等技术特征,以满足5G通信的高传输速率、波束智能

weixin_44450575的博客 1万+

最短路变形(限制条件)POJ 1724

题意:在一个 n 个点,r 条边的图上, 一个人要从 1 号点走到 n 号点,走的路径有距离还有花费。问花费最多为 k ,最短路程是多少? /** 最短路变形: 在求最短路的情况下,加上限制条件(边的权值有花费 和 长度) 一定花费范围内求最短路 思路: 将图的信息邻接表存储,遍历图时,通过 优先队列(距离小的优先) 把花费能够走到的点(下一个点的编号,从1到该点的距离和花费)放进队列, 由于队列是距离优先,所以第一个遍历到的 n 就是最短

HappyCode 350

【机械视觉】Halcon—【二、Halcon算子全面介绍(超详细版)】

Halcon 的算子(operators)按照功能被系统性地划分为多个类别,官方文档中目前(Halcon 22.11 版本)共有 19 个主分类,每个主分类下还有若干子分类。 本人在此对这19个分类的常用核心算子进行了一系列的总结,且本人在文章最后还总结了一些案例经验。 注意: ​​​​​​​跨分类调用:某些算子可能在多个分类中,但官方文档中会明确其主分类。 例如: read_image(文件操作)常被其他分类(如图像处理)的示例调用,但其核心功能是文件读取。

qq_3517289697的博客 3914

bzoj 2143 飞飞侠【最短路】

解题思路:这道题点很少,但是边可能很多,直接建图做最短路显然不可行。 但是如果把弹射看成获得了可以走a[i][j]的能量。 这样就可以直接最短路了。 每走一格可看作消耗1的能量,f[i][j][k]表示在i,j这个点且有k的能量的最少费用。 每次只要向四个方向走,或者原地不动即可。 做三次最短路即可。#include<iostream> #include<cstdio> #include<

cdsszjj的博客 421

PyTorch深度学习实战(47)——使用PyTorch构建Transformer模型

相较于传统模型,如循环神经网络 (RNN),Transformer 的优势在于能够理解输入和输出序列中元素之间的关系,在大语言模型 (如 ChatGPT 和 DeepSeek) 的发展中起到了关键作用,为了从零开始构建 Transformer,首先探讨自注意力机制,包括查询 (query)、键 (key) 和值 (value) 向量,以及缩放点积注意力 (SDPA)。将层归一化和残差连接集成到多头注意力层中,并与前馈层结合,构建编码器层,堆叠编码器层构建编码器,还将实现 Transformer 中的解码器。

盼小辉丶的博客 3万+

【国密】基于SM2的协同签名与协同解密方案

两方协同签名指客户端与服务端协同完成签名、验签操作,具体实现方案参考了信工所专利[3]。在业务应用中,两方或多方的协同签名一般采用门限签名方案可以用来构造。门限密码算法在多方协作的相关场景中应用十分广泛,可以实现数据联合授权、认证、密钥安全恢复、密钥安全交换等需求,在诸多分布式多方计算协议中均可见其身影。在上述两方协同签名方案中,最巧妙的地方在于签名值s分量的构造,通过一些列数学变换,得以恢复。以下从两方协同签名方案介绍入手,介绍门限密码在协同签名中的应用。解决上述问题的关键在于门限密码算法的巧妙构造。

听雨草堂 8388

BZOJ2143: 飞飞侠

题目大意:大家自己去看题吧。。。解释不清qwq。 题解: 发现这题是一个经典的最短路题目,但是如果暴力存边好像存不下。。。 那我们就不存边,在最短路转移时直接转移当前点可以到的其他点。 这样理论上复杂度很对,在BZOJ和洛谷都过了,但是被FZOJ卡成了60分,听说要把堆优化Dijkstra改成线段树优化Dijkstra。。。 太懒了不想改,细节大家看代码吧。。。 #inc...

banti7075的博客 227

数据分析案例-2024年裁员数据集可视化分析

本实验数据集来源于Kaggle,原始数据集为2020-2024年裁员数据,共有3577条,12个变量,该数据集提供了不同公司的裁员信息。它包括以下几栏:Company:裁员发生的公司名称。Location_HQ:公司总部位置。Industry:公司所属的行业或部门。Laid_Off_Count:公司解雇的员工数量。Percentage:公司员工被解雇的百分比。Date:裁员发生的日期。Source:信息来源网址。Funds_Raised:公司募集资金的信息。

m0_64336780的博客 1万+

BZOJ2143: 飞飞侠 最短路

Description 给出两个 n ∗ m 的矩阵 A,B,以及 3 个人的坐标 在 (i, j) 支付 Ai,j 的费用可以弹射到曼哈顿距离不超过 Bi,j 的位置 问三个人汇合所需要的最小总费用 Sample Input 4 4 0 0 0 0 1 2 2 0 0 2 2 1 0 0 0 0 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 2 ...

xgc_woker的博客 266

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

2018.11.05 bzoj2143: 飞飞侠(最短路)

传送门 最短路好题。 考虑对每个二维坐标建立一个高度属性。 这样每次如果在点(i,j,0)(i,j,0)(i,j,0)只能选择花费bi,jb_{i,j}bi,j​跳向(i,j,ai,j)(i,j,a_{i,j})(i,j,ai,j​),然后如果当前状态的高度不是000就可以花费000的代价选择让高度下降一个,同时向周围四格走一步或者原地不动。 然后...

weixin_30394981的博客 140

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[NOIP模拟]BZOJ 2143 飞飞侠

BZOJ 2143 飞飞侠 最短路

Anonymous_jacklovecj的博客 541

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

bzoj 2143: 飞飞侠

1 #include<cstdio> 2 #include<iostream> 3 #include<queue> 4 #define inf 1000000000 5 #define M 155 6 using namespace std; 7 int xx[5]={0,1,-1,0,0},yy[5]={0,0,0,...

weixin_33805992的博客 185

莫比乌斯反演题表

莫比乌斯反演题表

TYB的博客 815

【HDU4360】 最短路变形

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4360 题目大意:屌丝DD从地点1到地点n去找他的女神QQ,总共n个点,两个点之间可能有多条路,每条路上记录一个距离w和一个状态c,DD只能按女神要求走,即‘L’->’O’->’V’->’E’->’L’->’O’->’V’->’E’->...

baidui8622的博客 176

BZOJ 2143 飞飞侠(分层最短路)

飞飞国是一个N×M的矩形方阵,每个格子代表一个街区。然而飞飞国是没有交通工具的。飞飞侠完全靠地面的弹射装置来移动。每个街区都装有弹射装置。使用弹射装置是需要支付一定费用的。而且每个弹射装置都有自己的弹射能力。我们设第i行第j列的弹射装置有Aij的费用和Bij的弹射能力。并规定有相邻边的格子间距离是1。那么,任何飞飞侠都只需要在(i,j)支付Aij的费用就可以任意选择弹到距离不超过Bij的...

weixin_30508309的博客 182

bzoj2143: 飞飞侠(最短路)

2143: 飞飞侠 Time Limit: 50 Sec Memory Limit: 259 MB Description 飞飞国是一个传说中的国度,国家的居民叫做飞飞侠。飞飞国是一个N×M的矩形方阵,每个格子代表一个街区。然 而飞飞国是没有交通工具的。飞飞侠完全靠地面的弹射装置来移动。每个街区都装有弹射装置。使用弹射装置是需 要支付一定费用的。而且每个弹射装置都有自己的弹射能力。我们...

lvmaooi的博客 341

飞飞侠

【题目描述】 飞飞国是一个传说中的国度,国家的居民叫做飞飞侠。飞飞国是一个N×M的矩形方阵,每个格子代表一个街区。然而飞飞国是没有交通工具的。飞飞侠完全靠地面的弹射装置来移动。每个街区都装有弹射装置。使用弹射装置是需要支付一定费用的。而且每个弹射装置都有自己的弹射能力。我们设第i行第j列的弹射装置有A[i,j]的费用和B[i,j]的弹射能力。并规定有相邻边的格子间距离是1。那么,任何飞飞侠都...

weixin_30273501的博客 162

[NOIP2017模拟][bzoj2143] 飞飞侠

2017.10.31 T2 2024题目背景 bzoj2143题目描述 飞飞国是一个传说中的国度,国家的居民叫做飞飞侠。飞飞国是一个N×M的矩形方阵,每个格子代表一个街区。然而飞飞国是没有交通工具的。飞飞侠完全靠地面的弹射装置来移动。每个街区都装有弹射装置。使用弹射装置是需要支付一定费用的。而且每个弹射装置都有自己的弹射能力。我们设第i行第j列的弹射装置有Aij的费用和Bij的弹射能力。并规定有

g19zwk的博客 555

bzoj2143 飞飞侠 最短路

用d[i][j][k]表示走到第(i,j)格,在不弹射的情况下还能再走k步的最小花费,那么有转移:        d[i][j][k]->d[x][y][k-1],其中(i,j)和(x,y)相邻或相等,k>0,表示走到相邻一格或不走;        d[i][j][0]+a[i][j]->d[x][y][b[i][j]],表示一次弹射。        注意样例输入的A,B数组相反?另外听说卡

lych的博客 1224

[bzoj2143][Dijkstra]飞飞侠

Description 飞飞国是一个传说中的国度,国家的居民叫做飞飞侠。飞飞国是一个N×M的矩形方阵,每个格子代表一个街区。然 而飞飞国是没有交通工具的。飞飞侠完全靠地面的弹射装置来移动。每个街区都装有弹射装置。使用弹射装置是需 要支付一定费用的。而且每个弹射装置都有自己的弹射能力。我们设第i行第j列的弹射装置有Aij的费用和Bij的弹 射能力。并规定有相邻边的格子间距离...

Rose_max的博客 423

[国家集训队]飞飞侠

暴力枚举跑三遍堆优化Dijkstra即可 手写堆记得清零 #include"cstdio" #include"cstring" #include"iostream" #include"algorithm" using namespace std; const int MAXN=155; const char ch[4]={0,'X','Y','Z'}; const int dx[4]=...

162
上一篇: NOIP2017赛前模拟 纸袋(并查集)
下一篇: 埃及分数 (迭代加深入门)
Amessal
博客等级 码龄10年 9粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值