DescriptionDescriptionDescription

给定一个n×nn\times nn×n的01矩阵,从0走到1会消耗1点代价,给定mmm个询问,每次询问xi,yix_i,y_ixi​,yi​到边界的最短距离

数据范围:n≤1000n\leq 1000n≤1000


SolutionSolutionSolution

我们将代价取反,从1走到0才消耗代价,这样我们就可以从边界跑到询问,于是我们可以预处理

但是直接这样做复杂度是O(n3)O(n^3)O(n3)的

考虑到每次跑的图是一样的,直接扔到队列里跑,预处理最坏复杂度才O(n2)O(n^2)O(n2)

于是就O(n2+m)O(n^2+m)O(n2+m)过掉咯。。。


CodeCodeCode

#pragma GCC optimize(2)
%:pragma GCC optimize(3)
%:pragma GCC optimize("Ofast")
%:pragma GCC optimize("inline")
#include<queue>
#include<cctype>
#include<cstdio>
#include<cstring>
#define LL long long
#define N 1010
using namespace std;int n,m,x,y,ans,f[N][N];
bool v[N][N],vis[N][N];
const short dx[8]={-1,-1,-1,0,1,1,1,0};
const short dy[8]={-1,0,1,1,1,0,-1,-1};
queue<int>qx,qy;
inline LL read()
{char c;LL d=1,f=0;while(c=getchar(),!isdigit(c)) if(c=='-') d=-1;f=(f<<3)+(f<<1)+c-48;while(c=getchar(),isdigit(c)) f=(f<<3)+(f<<1)+c-48;return d*f;
}
inline void Push(int x,int y)
{if(vis[x][y]) return;qx.push(x);qy.push(y);vis[x][y]=true;f[x][y]=0;return;
}
inline void spfa()
{while(qx.size()){int x=qx.front(),y=qy.front();qx.pop();qy.pop();vis[x][y]=false;for(register int i=0;i<8;i++){int nx=x+dx[i],ny=y+dy[i];if(nx<1||ny<1||nx>n||ny>n) continue;if(f[nx][ny]>f[x][y]+(v[x][y]&&!v[nx][ny])){f[nx][ny]=f[x][y]+(v[x][y]&&!v[nx][ny]);if(!vis[nx][ny]) vis[nx][ny]=true,qx.push(nx),qy.push(ny);}}}return;
}
signed main()
{memset(f,0x3f,sizeof(f));n=read();m=read();for(register int i=1;i<=n;i++) for(register int j=1;j<=n;j++) scanf("%1d",&v[i][j]);for(register int i=1;i<=n;i++) Push(i,1),Push(i,n),Push(1,i),Push(n,i);spfa();while(m--){int x=read(),y=read();printf("%d ",f[x][y]);}
}

JZOJ 1403.渡河相关推荐

  1. 题解 JZOJ 1353.渡河问题

    题目描述 Farmer John以及他的N(1 <= N <= 2,500)头奶牛打算过一条河,但他们所有的渡河工具,仅仅是一个木筏. 由于奶牛不会划船,在整个渡河过程中,FJ必须始终在木 ...

  2. JZOJ 5461 购物 —— 贪心

    题目:https://jzoj.net/senior/#main/show/5461 贪心,原来想了个思路,优先选优惠价最小的 K 个,然后其他按原价排序遍历: 如果当前物品没选过,原价选上,如果选过 ...

  3. AI A_star算法野人渡河-实验报告

    1. 问题描述及实验要求 请用A*算法实现野人过河问题,(1)分析设计估价函数f(2)采用C语言或Python编程实现(代码中适当加注释,输出具有可读性).        问题描述:设有m个传教士和n ...

  4. AI传教士和野人渡河问题-实验报告

    一 题目要求: 设有m个传教士和n个野人来到河边,打算乘一只船从左岸渡到右岸去,该船每次最多载3人.在任何时候,如果野人人数超过传教士人数,那么野人就会把传教士吃掉.他们怎样才能用这条船安全地把所有人 ...

  5. mysql语句报错1403_GoldenGate SQL error 1403 mapping 错误解决方案

    GoldenGate SQL error 1403 mapping 错误解决方案 故障现象: 2011-09-06 15:45:29 WARNING OGG-01004 Oracle GoldenGa ...

  6. 2017.04.15【NOIP2017提高组】模拟赛B组 T2:渡河

    Description 传说中教主乃世外高人,不屑于参加OI竞赛,于是云游四方,威风八面.只不过教主行踪不定,就像传说中的神兽一样可遇而不可求.小L和小H为了求得教主签名的Orz教主T-Shirt,打 ...

  7. JZOJ 5372. 【NOIP2017提高A组模拟9.17】猫

    Description 信息组最近猫成灾了!隔壁物理组也拿猫没办法.信息组组长只好去请神刀手来帮他们消灭猫.信息组现在共有n 只猫(n 为正整数),编号为1 到n,站成了一个环,第i 只猫的左边是第i ...

  8. GoldenGate SQL error 1403 mapping 错误解决方案

    故障现象: 2011-09-06 15:45:29  WARNING OGG-01004  Oracle GoldenGate Delivery for Oracle, rora_001.prm: A ...

  9. [jzoj NOIP2018模拟 11.01]

    很庆幸打了这场模拟赛,因为这一场爆零 好像上次纪中的某场比赛我也出现了同样的问题,光是计算时间复杂度而忘记了空间的限制.想必是比上次惨的,考场上就写了两题而这两题都因为MLE爆零了.而且我T2还码了7 ...

最新文章

  1. python while循环语句-Python While 循环语句
  2. UITableView-常见设置
  3. Java实现单链表反转操作
  4. 深度学习pytorch--MNIST数据集
  5. 黑马程序员_Java集合框架
  6. 水溶彩铅的特点技法运用
  7. ADO.NET DataReader对象简介
  8. 仿生软体机器人就业咋样_SRT近亿元B轮融资,中国软体机器人技术从空白到全球领先...
  9. 计算机组成原理 - x86 x64 arm64的区别 - 学习/实践
  10. LG V50救砖教程
  11. matlab中灰色模型代码,灰色模型matlab代码
  12. Docker下安装部署MsSql
  13. Aras Innovator: Catagoy, Itemtype, Item, Relationship的视图
  14. java任务队列_java 任务队列
  15. 基于Ubuntu20.04运行OP-TEE_3.17.0_QEMU_V8的环境搭建
  16. Cloud IDEs For Web Developers – Best Of
  17. 2022五千元笔记本电脑推荐
  18. 网易、百度等公司面试题整理
  19. API比较PostMessageA和SendMessageA游戏屏蔽
  20. 第四章 数据库安全性

热门文章

  1. discuz二次开发 教你识别程序目录和文件列表
  2. jxr怎么变成jpg_【推文】夫君是未来大魔王怎么办?作死女配掉线了与你千般好...
  3. 加密货币工具和算法大合集
  4. 超多版式运用手法!128张让你灵感爆发的海报设计
  5. 偏振器件传输矩阵matlab编程,关于传输矩阵法模拟光子晶体的MATLAB编程
  6. java游戏 飞机对战
  7. 22一战上岸首师大电子信息经验分享|低成本获得大收益|电子信息
  8. h5 实现微信支付以及易宝银行卡支付
  9. 电脑录屏软件帧率设置详解
  10. 手机屏幕常见故障_iPhone手机一些比较常见的维修故障分析