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");
}
Python新手必看:5分钟搞定睿尔曼机械臂基础控制(附代码示例) 本文为Python新手提供了快速上手睿尔曼机械臂基础控制的实战指南。通过详细的步骤讲解和代码示例,介绍了从环境搭建、网络配置、SDK安装到建立连接、执行关节运动(movej)、直线运动(movel)等核心控制指令的全过程,帮助零基础开发者快速实现机械臂的基础操控。 阅读详情

相关推荐

数字化车间智能排产调度挑战赛(一)—— 数学模型

科大讯飞——数字化车间智能排产调度挑战赛。

Lyyyp的博客 5649

BZOJ2143 飞飞侠 最短路

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

a18700013354的博客 159

DeepSeek-OCR 本地部署使用教程(附完整环境配置与推理示例)

DeepSeek-OCR是由DeepSeek AI推出的开源OCR模型,支持高精度文档识别与结构化输出(如Markdown转换)。本文提供了详细的本地部署指南,包括系统要求(推荐Linux+A100 GPU)、环境配置(Python 3.12.9+PyTorch 2.6.0+CUDA 11.8)、模型下载及两种推理方式:高性能的vLLM(适合批量处理)和灵活的Transformers(适合调试)。支持多种分辨率模式和提示词模板,适用于合同识别、PDF转换等场景。常见问题包括显存优化和性能调优建议。

qq_58607032的博客 6722

BZOJ 2143 飞飞侠

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

191

Unity中的坐标系及其转换方法

Unity中的坐标系及其转换方法 Unity中有四种坐标系: 1.全局坐标系 World Coordinate System 全局坐标系是用于描述场景内所有物体位置的方向的基准,也称为世界坐标系,Unity中创建的物体都是以全局坐标系中的坐标原点(0,0,0),来确定各自的位置的,可以使用transform.position来获取游戏对象的世界坐标。 2.局部坐标系 Local Coordinate System 局部坐标系也称为模型坐标系或物体坐标系,每个物体都有自身独立的物体坐标系。当物体移动或改变方向

Z_hongli的博客 8179

保姆级教程:在RK3576上配置USB网卡从零到外网访问(附udev规则详解)

本文提供了在RK3576开发板上配置USB网卡的完整教程,涵盖从内核驱动、udev规则到网络路由的全流程。重点讲解了如何利用USB Gadget功能实现高速网络连接,并构建稳定的算力集群,确保多设备间通信及外网访问。

grass的博客 458

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

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

HappyCode 350

Cursor聊天记录迁移工具:实现跨设备AI对话同步与备份

在软件开发中,数据持久化与迁移是常见需求,尤其当工具依赖本地存储时。SQLite作为轻量级关系型数据库,因其嵌入式、零配置特性,常被用于存储应用状态与用户数据。其WAL(预写式日志)模式提升了并发性能,但也增加了数据操作复杂性。通过命令行工具与JSON序列化技术,可以实现结构化数据的提取、转换与安全迁移,这对于保障开发资产的连续性与可移植性具有重要价值。例如,在AI辅助编程场景下,开发者与AI的对话记录包含关键的问题分析、解决方案与决策逻辑,是重要的上下文资产。cursor-chat-transfer工具正

weixin_42551967的博客 533

bzoj 2143 飞飞侠【最短路】

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

cdsszjj的博客 421

SAP CPI 之使用国密算法实现SM系列算法加解密

System.out.println("SM2-私钥:" + privateKey);System.out.println("SM2-公钥:" + publicKey);System.out.println("SM2-密文:" + encrypts);System.out.println("SM2-明文:" + data2);新建groovy,通过import之后,调用jar包中的方法。在CP中导入jar包,选择Upload,选中导入的jar包。的密钥和向量值,不安全!的公钥和私钥,不安全!

u012830826的博客 1335

第7次CCF PTA编程培训师资认证-T1 真题解析(2024下)

B。

lan_in的博客 513

BZOJ2143: 飞飞侠

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

banti7075的博客 227

PCL 建筑物点云立面和平面分割提取【2025最新版】

在建筑物点云中,立面点和平面点的法向量存在明显的差异,根据法向量在Z方向的分量设置相应得阈值即可实现立面点与平面点的分割。

点云侠的博客 1962

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

[NOIP模拟]BZOJ 2143 飞飞侠

BZOJ 2143 飞飞侠 最短路

Anonymous_jacklovecj的博客 541

jre9下载 jdk9

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

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、付费专栏及课程。

余额充值