$CF1063B\ Labyrinth$ $01$最短路/$01BFS$
\(Des\)
有一个网格图,上面的格子分为空地和障碍,障碍是不可以走的.现在从给定的起点出发开始到处乱走,最多可以往左走\(l\)次,往右走\(r\)次.求可能到达的点数.
\(Sol\)
如果只限制了向左或向右走的次数就要简单一些,所以我们先思考这一种情形.
假设只限制了向左走不能超过\(l\)次.这样转化:对于每个点,它向左走花费的代价是\(1\),其他方向的代价是\(0\).求从给定起点出发,走到每一个点的最小花费.对于某一个点,如果这个花费是\(\leq l\)的,那么这个位置就是可达的.这不就是\(01\)最短路嘛.
现在考虑第二个限制.其实可以发现从起点走到一个特定的点,若向左走的步数一定,那么向右走的步数也是一定的,而且向左走的步数越少,向右走的步数也越少.也就是说,在只考虑一个限制时跑的最短路在考虑两个限制时仍然是最短路.于是就直接按照上面讲的做就好了,统计答案的时候考虑两个限制.
其实,并不需要求出所有的最短路,只要满足限制的点向别的点转移就可以了.
\(Code\)
Code
```cpp
#include
#define il inline
#define Ri register int
#define go(i,a,b) for(Ri i=a;i=b;--i)
#define e(i,u) for(Ri i=b[u];i;i=a[i].nt)
#define mem(a,b) memset(a,b,sizeof(a))
#define ll long long
#define db double
#define inf 2147483647
using namespace std;
il int read()
{
Ri x=0,y=1;char c=getchar();
while(c'9'){if(c=='-')y=-1;c=getchar();}
while(c>='0'&&cq;
int main()
{
n=read(),m=read();rx=read(),ry=read();l=read(),r=read();
go(i,1,n)scanf("%s",(s[i]+1));
q.push_back((nd){rx,ry,0,0});
while(q.size())
{
nd nw=q.front();Ri nx=nw.x,ny=nw.y,nl=nw.l,nr=nw.r;q.pop_front();
if(nl>l || nr>r || vis[nx][ny])continue;
vis[nx][ny]=1;++as;
go(i,0,3)
{
Ri tx=nx+dx[i],ty=ny+dy[i];
if(txn || tym || s[tx][ty]=='*')continue;
nd tw=(nd){tx,ty,nl+(i==1),nr+(i==0)};
if(i==1)q.push_back(tw);
else q.push_front(tw);
}
}
printf("%d\n",as);
return 0;
}
<details>
随机推荐
- docker compose安装gitea
docker-compose.yml version: "3.4" networks: gitea: external: false services: server: image ...
- BT17破解软件
大家好我QQ是1617089375 有非常多网友非常好奇新版BT17无线网破解软件究竟怎么样.无图无真相,所以我上传给大家看看,眼下视频正在录制.稍后也会把相应的视频公布到网上.因为 ...
- @bzoj - 4922@ [Lydsy1706月赛]Karp-de-Chant Number
目录 @description@ @solution@ @accepted code@ @details@ @description@ 卡常数被称为计算机算法竞赛之中最神奇的一类数字,主要特点集中于令 ...
- php实现第三方登录
1. oAuth2.0原理 网站为了方便用户快速的登录系统,都会提供使用知名的第三方平台账号进行快速登录的功能,第三方登录都是基于oAuth2.0标准来实现的.下面详细分析[基于账号密码授权]和[基于 ...
- python基础之逻辑题(1)
python基础之逻辑题(1) 1.用一行代码实现数值交换? 2.求结果--fromkeys? 3.1,2,3,4,5能组成多少个互不相同且无重复的三位数? 4.有两个字符串列表a和b,每个字符串是逗 ...
- saltStack 状态模块(状态间的关系)
unless onlyif:状态间的条件判断,主要用于cmd状态模块 常用方法: onlyif:检查的命令,仅当'onlyif' 选项指向的命令返回true时才执行name 定义的命 unle ...
- 2-3-4 tree留坑
#include<bits/stdc++.h> #define LL long long #define pii pair<int,int> #define mp make_p ...
- tinyhttpd简介
一:简介: tinyhttpd是由J. DavidBlackstone在1999年编写的,实现了一个很简单的web服务器.支持GET和POST方法,总代码量也就在500行左右,可以用来学习HTTP协议 ...
- @codechef - SERSUM@ Series Sum
目录 @description@ @solution@ @part - 1@ @part - 2@ @part - 3@ @accepted code@ @details@ @description@ ...
- Python--day24--多继承
如果本生没有func方法的话就调用距离自己最近的基类的方法 钻石继承: 查找方法的顺序:如下例的找func方法(广度优先) 例1: 例2: 漏斗继承: 小乌龟继承问题:(最顶端的节点F是最后查找的) ...