「Luogu P3395」路障 解题报告
点开有惊喜
其实是题面
这D1T1给的很有面子! 我居然做的来!
从左上角走到右上角
然后n<=1000
所以果断放弃DFS,选择BFS
思路还是一样的BFS
证明:
走到一个点的时间越早越好(因为时间越晚能走到的点越少,路障多了)
所以用BFS,走过的点不用再次走,用 vis数组记录已经是否遍历过
然后为了防止跑出棋盘去(B君看到了棋盘外美铝?!)
我们就给棋盘加一个 '1'的边框,这样就不会出去
然后还要记录一个时间t、x、y,可以用一个结构体
构造用
struct node{
int x,y,t;
node(int a,int b,int c):x(a),y(b),t(c) { }
node(){}
};
node(x,y,t)//直接构造
但是本菜还是比较喜欢用两个queue
一个存pair(x,t),一个存y
贴上:
#include<bits/stdc++.h>
#define INF 0x7f7f7f7f
using namespace std;
int Cx[4]={1,0,0,-1};//四个方向,八个方向也一样
int Cy[4]={0,1,-1,0};//在下有强迫症,所以用两个数组
int n,T;
int x,y;
int b[1010][1010];
bool vis[1010][1010];
int read()
{
int s=0;
char c=getchar();
while(!isdigit(c))
c=getchar();
while(isdigit(c))
{
s=(s<<1)+(s<<3)+c-'0';
c=getchar();
}
return s;
}
bool BFS()
{
int i,t;
int Tx,Ty;
queue<pair<int,int> >px;
queue<int>py;
while(!py.empty())
px.pop(),py.pop();
px.push(make_pair(1,1));
py.push(1);
vis[1][1]=1;
while(!px.empty())
{
x=px.front().first;
t=px.front().second;px.pop();
y=py.front();py.pop();
if(x==n&&y==n)//有了这句就不用特判n=1的情况了
return 1;
for(i=0;i<4;i++)
{
Tx=x+Cx[i];
Ty=y+Cy[i];
if(!vis[Tx][Ty]&&t<=b[Tx][Ty])
{
vis[Tx][Ty]=1;
px.push(make_pair(Tx,t+1));
py.push(Ty);
}
}
}
return 0;
}
int main()
{
int i;
T=read();
while(T--)
{
n=read();
memset(vis,0,sizeof(vis));
memset(b,INF,sizeof(b));//一开始赋无穷大比较方便
for(i=1;i<=n;i++)//裱框
vis[i][0]=vis[0][i]=vis[n+1][i]=vis[i][n+1]=1;
for(i=1;i<=2*n-2;i++)
{
x=read();y=read();
b[x][y]=i;
}
if(BFS())//此处纪念ydk大佬把"Yes"打成"YES",本蒟瑟瑟发抖
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
「Luogu P3395」路障 解题报告的更多相关文章
- 「AHOI / HNOI2018」转盘 解题报告
「AHOI / HNOI2018」转盘 可能是我语文水平不太行... 首先可以猜到一些事实,这个策略一定可以被一个式子表示出来,不然带修修改个锤子. 然后我们发现,可以枚举起点,然后直接往前走,如果要 ...
- 「CF670C」Cinema 解题报告
题面 传送门 思路: 离散化.hash 对于这样一个明显的统计排序的题目,当然轻而易举啦~ 但是!看!语言的编号 a数组和 b数组的值最大在\(10^9\)的级别,所以开个数组来存---That's ...
- 「Luogu P3866」[TJOI2009]战争游戏 解题报告
题面 好难表述啊~ 在n*m的矩阵上,有一些大兵(为0),一些空地(一个正整数),障碍物(-1),现在摧毁一些空地,使所有大兵不能走出矩阵去(代价为表示空地的整数),求最小代价 思路: 网络流最小割 ...
- 「Luogu P2201」数列编辑器 解题报告
数列编辑器,在线IDE 本期的主题是洛谷的在线IDE 小学生?!小学生虐我
- 「Luogu P2015」二叉苹果树 解题报告
题面 一个二叉树,边数为n\((2<n\le 100)\),每条边有一个权值,求剪枝后剩下p\((1<p<n)\)条边,使p条边的权值和最大 还看不懂?-- 2 5 input:5 ...
- 「Luogu P2508」[HAOI2008]圆上的整点 解题报告
题面 给定圆的半径,求圆上整点数 这是一道很Nice的数学题!超爱!好吧,由于这道题,我去Study了一下复数(complex number)复杂的数 真棒!!! 有兴趣的戳这里!!!\(\huge ...
- 「Luogu P2278」[HNOI2003]操作系统 解题报告
题面 一道模拟题,模拟CPU的处理过程?!省选模拟题 思路: 模拟退火大法+优先队列乱搞 要注意的点 1.空闲时,CPU要处理进程 2.当队列中没有进程时,要先进行判断,然后访问 3.当优先级高的进程 ...
- 「Luogu P1210」回文检测 解题报告
题面 这是一道诡异的黄题 居然让你求一串吧啦吧啦的东西中 字母(大小写)最长的回文串的长度,还要输出完整的串 吐血 思路: 保持淡定,我们啥都不会,就会Manacher,那就用Manacher大法! ...
- 「Luogu P4987」回文项链 解题报告
题面 求环中的长度为k(k为奇数)且回文中心不同的回文串个数 思路: 刚学manacher算法,就送上一道模板题,此题注重对manacher算法的理解 Manacher,但是不用插入其他符号,因为k是 ...
随机推荐
- 项目中容易出现的BUG预警
之前没有记录BUG的习惯导致在同一个坑里边栽了好几次,于是将最近几个项目中遇到的问题整理一下,在进行新项目时预警一遍: 使用携带有搜索功能的分页查询时,注意当用户更改了查询条件但没有点击查询按钮直接点 ...
- oracle 通过内部函数提高SQL效率.
SELECT H.EMPNO,E.ENAME,H.HIST_TYPE,T.TYPE_DESC,COUNT(*) FROM HISTORY_TYPE T,EMP E,EMP_HISTORY H WHER ...
- centos安装hdp
1. 准备6和7的 YUM源包 1.1 centos 下载后解压到同一个目录 http://mirrors.163.com/centos/6/isos/x86_64/CentOS-6.9-x86_64 ...
- Laravel实现定时任务的示例代码
https://mp.weixin.qq.com/s/VUEqjwcHRb0ovhP0wup36A 最近在玩Laravel实现定时任务,这个是示例代码,可以参照这个实例.有需要的可以看看 定时任务是后 ...
- Oracle的dual是什么东西啊
原文:https://zhidao.baidu.com/question/170487574.html?fr=iks&word=dual&ie=gbk Oracle的dual是什么东西 ...
- ES6语法~解构赋值、箭头函数、class类继承及属性方法、map、set、symbol、rest、new.target、 Object.entries...
2015年6月17日 ECMAScript 6发布正式版本 前面介绍基本语法, 后面为class用法及属性方法.set.symbol.rest等语法. 一.基本语法: 1. 定义变 ...
- springboot+thymeleaf 纯后台渲染偷懒版分页
分页的样式就是这样的 cotroller这里这么写,传给view总页数,现在的页数,下一页,上一页的信息 private String homeInfo(Model model) { Page< ...
- 在Vue 中调用数据出现属性不存在的问题
这已经是我在调用数据时趟过几次的坑了,索性记录下来防止后面再犯: 一般我们请求数据来渲染一个页面的时候,请求下来的数据基本上都是数组或是对象,再通过列表循环和插值表达式渲染的页面:在data 中提前声 ...
- Linux 内核中的数据类型
在我们进入更高级主题之前, 我们需要停下来快速关注一下可移植性问题. 现代版本的 Linux 内核是 高度可移植的, 它正运行在很多不同体系上. 由于 Linux 内核的多平台特性, 打算做认真使用的 ...
- js三大框架出现的意义
解决了原始html,css,js的UI与数据状态之间同步的难题,避免了大量的操作DOM代码. 使用了React,Angular和Vue,我们只需要定义一次 UI 界面,不再需要为每个操作编写特定的 U ...