博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CF1214D Treasure Island
阅读量:4511 次
发布时间:2019-06-08

本文共 1653 字,大约阅读时间需要 5 分钟。

题目大意

  一个n*m的矩阵,Vasya想要从矩阵矩阵的(1,1)(左上角)走到(n,m)(右下角),矩阵中有一些格不能走,一次只能向下或向右。现在你可以使一些格变得不能走来阻止他走到,问最少改变几个格。 (3<=n*m<=1000000)

思路

  把矩阵按行加列分层,即,

                                                                          

 

  则从左上角到右下角的路径一定经过每一层的至少一个格,那么我从起点bfs一遍统计出每层能到达的格分别有多少个,我只需要把其中一层能到达的全部格都变成障碍就好,那一层需要变得少就变哪一层。于是我又WA了一发。

  上述想法还有一个漏洞,就是有可能这一层的这个格是可以到达的,但是从它又到不了(n,m)(例如,下图的样例),这一层就完全可以不用把这个格变为障碍,但是统计能到达格的时候又记录了它。出现这样的情况只能因为走到有些格就在已无法到达终点了,那么这些点无异于障碍,因此加一个预处理把这样的点都变成障碍就好(注意要从终点向前找)。

                                                                    

代码

1 #include
2 3 using namespace std; 4 5 int n,m; 6 char s[1000006]; 7 int cnt[1000006],dis[1000006]; 8 queue
q; 9 10 int main()11 {12 scanf("%d%d",&n,&m);13 char ch=getchar();14 for(int i=1;i<=n;i++)15 {16 while(ch!='.'&&ch!='#')ch=getchar();17 for(int j=1;j<=m;j++)18 {19 s[(i-1)*m+j]=ch;20 ch=getchar();21 }22 }23 for(int i=m*n-1;i>1;i--)//预处理 24 {25 int r=(i+m-1)/m,c=i%m;26 if(c==0)c=m;27 if(c+1>m||(c+1<=m&&s[(r-1)*m+c+1]=='#'))28 if(r+1>n||(r+1<=n&&s[r*m+c]=='#'))s[i]='#';29 }30 q.push(1);31 dis[1]=2;32 while(!q.empty())//bfs 33 {34 int dang=q.front();q.pop();cnt[dis[dang]]++;35 int r=(dang+m-1)/m,c=dang%m;36 if(c==0)c=m;37 if(c+1<=m&&s[(r-1)*m+c+1]=='.'&&dis[(r-1)*m+c+1]==0)38 {39 dis[(r-1)*m+c+1]=dis[dang]+1;40 q.push((r-1)*m+c+1);41 }42 if(r+1<=n&&s[r*m+c]=='.'&&dis[r*m+c]==0)43 {44 dis[r*m+c]=dis[dang]+1;45 q.push(r*m+c);46 }47 }48 int ans=2;49 for(int i=3;i

 

转载于:https://www.cnblogs.com/LiqgNonqfu/p/11462670.html

你可能感兴趣的文章
中间件
查看>>
Bytom移动端钱包SDK开发基础
查看>>
大龄恐惧症 (zz)
查看>>
MySQL数据分组GROUP BY 和HAVING
查看>>
vim配置成c++IDE
查看>>
iOS开发中APP之间传递信息1--URL Schema(应用程序间互相启动)
查看>>
MyEclipse持续性开发教程:用JPA和Spring管理数据(一)
查看>>
二级域名共享cookiee 无法删除
查看>>
Luogu 3620 数据备份 - Set
查看>>
03 python 初学(字符格式化输出)
查看>>
百度地图实现普通地图、定位、周边搜索功能
查看>>
OpenCV 学习笔记 02 处理文件、摄像头和图形用户界面
查看>>
图论(网络流):COGS 410. [NOI2009] 植物大战僵尸
查看>>
原理图和PCB元件对应查找--Altium Designer
查看>>
c#鼠标移动到Button 改变颜色
查看>>
利用node搭建本地服务器
查看>>
python pickle命令执行与marshal 任意代码执行
查看>>
Elasticsearch 2.3 java api
查看>>
golang写入csv
查看>>
基础2
查看>>