[Codeforces 1214D]Treasure Island(dfs)

题面

给出一个n*m的字符矩阵,'.'表示能通过,'#'表示不能通过。每步可以往下或往右走。问至少把多少个'.'变成'#',才能让从(1,1)出发不能到达(n,m)

\(n \times m \leq 10^6\)

分析

第一眼还以为是最小割,一看数据范围感觉会TLE。实际上搜索就可以了。

首先发现答案肯定是0,1,2中的一个(输出rand()%3),因为最多用2个'#',把(1,1)右侧和下方堵住就可以了。

然后注意到若存在一个点满足所有(1,1)到(n,m)的路径都经过那个点,那答案就为1.这实际上是一个有向图求割点的问题,类似HDU3313.

我们只需要dfs一遍,找出任意一条(1,1)到(n,m)的路径,然后把路径上的点标记为1。注意若(1,1)不能到(n,m),直接输出0.第二次dfs保证不经过路径上的点。如果第二次的时候(1,1)不能到(n,m),那就说明存在割点,答案为1。否则答案为2.

注意到数据范围\(n \times m \leq 10^6\),没有给出n,m的范围,所以要用vector存储字符矩阵。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define maxn 1000000
using namespace std;
int n,m;
char in[maxn+5];
vector<char>s[maxn+5];
struct node{
int x;
int y;
node(){ }
node(int _x,int _y){
x=_x;
y=_y;
}
};
const int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};
vector<bool>vis[maxn+5];
vector<bool>mark[maxn+5];
bool dfs(int x,int y){
if(x>n||y>m) return 0;
if(x==n&&y==m) return 1;
if(s[x][y]=='#'||vis[x][y]||mark[x][y]) return 0;
vis[x][y]=1;
bool flag=dfs(x+1,y);
if(!flag) flag=dfs(x,y+1);
//优先往(x+1,y)走,如果走不通再往(x,y+1)走,这样就可以避免被堵住的情况,详见评论区
if(flag) mark[x][y]=1;
return flag;
}
int main(){
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%s",in+1);
s[i].resize(m+1);
for(int j=1;j<=m;j++) s[i][j]=in[j];
vis[i].resize(m+1);
mark[i].resize(m+1);
}
bool flag=dfs(1,1);
if(!flag) printf("0\n");
else{
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++) vis[i][j]=0;
}
mark[1][1]=mark[n][m]=0;
flag=dfs(1,1);
if(!flag) printf("1\n");
else printf("2\n");
} }

[Codeforces 1214D]Treasure Island(dfs)的更多相关文章

  1. Treasure Island DFS +存图

    All of us love treasures, right? That's why young Vasya is heading for a Treasure Island. Treasure I ...

  2. Codeforces 106D Treasure Island 预处理前缀+暴力(水

    主题链接:点击打开链接 意甲冠军: 特定n*m矩阵 # 是墙 . 和字母是平地 最多有26个字母(不反复出现) 以下k个指令. 每一个指令代表移动的方向和步数. 若以某个字母为起点,依次运行全部的指令 ...

  3. D. Treasure Island

    D. Treasure Island dfs大法好== 写半天bfs疯狂MLE dfs标记掉路上的一些点 然后再跑一遍dfs #include<bits/stdc++.h> using n ...

  4. Gym 100971A Treasure Island BFS 思维题

    A - Treasure Island Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64 ...

  5. [Codeforces 1201D]Treasure Hunting(DP)

    [Codeforces 1201D]Treasure Hunting(DP) 题面 有一个n*m的方格,方格上有k个宝藏,一个人从(1,1)出发,可以向左或者向右走,但不能向下走.给出q个列,在这些列 ...

  6. [Codeforces 163D]Large Refrigerator (DFS+剪枝)

    [Codeforces 163D]Large Refrigerator (DFS+剪枝) 题面 已知一个长方体的体积为V,三边长a,b,c均为正整数,求长方体的最小表面积S V以质因数分解的形式给出 ...

  7. CodeForces - 1214D D. Treasure Island

    题目链接:https://vjudge.net/problem/2728294/origin 思路:可以抽象成管道,先试试能不能找到一个通道能通到终点, 如果可以则封锁这个通道,一个石头即可, 再试试 ...

  8. Treasure Island(两遍dfs)-- Codeforces Round #583 (Div. 1 + Div. 2, based on Olympiad of Metropolises)

    题意:https://codeforc.es/contest/1214/problem/D 给你一个n*m的图,每次可以往右或者往下走,问你使(1,1)不能到(n,m)最少要放多少 ‘ # ’ . 思 ...

  9. Pursuit For Artifacts CodeForces - 652E (Tarjan+dfs)

    Pursuit For Artifacts CodeForces - 652E Johnny is playing a well-known computer game. The game are i ...

随机推荐

  1. vue 搜索关键词 变颜色

    <a class="text"> <span>{{item.name.slice(0,item.name.toLowerCase().indexOf(inp ...

  2. Python 变量类型 Ⅱ

    Python字符串 字符串或串(String)是由数字.字母.下划线组成的一串字符. 一般记为 : s="a1a2···an"(n>=0) 它是编程语言中表示文本的数据类型. ...

  3. React native 之 async/await

    参考资料 :https://www.jianshu.com/p/1e75bd387aa0 要点: 1. async function(){} 将普通函数转换成Promise 2. await 表达式/ ...

  4. Card Game Cheater

    Card Game Cheater Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  5. JS深度判断两个数组对象字段相同

    /** * 判断此对象是否是Object类型 * @param {Object} obj */ function isObject(obj){ return Object.prototype.toSt ...

  6. sublime text3 - vue修改data,视图无更新

    ubuntu系统使用sublime text3做vue开发的时候遇到了一个问题,就是修改vue文件并保存后视图页面并不会随之修改,只有重新run dev时修改才会生效,原因没找到 猜想应该是subli ...

  7. 常用的vi快捷方式

    一般情况来说: 0代表行首,$代表行末 $,G代表最后一行 光标移动 0 移动到本行最前面 $ 移动到本行最后 G 移动文件最后一行 nG 移动到文件第n行 gg 移动到文件第一行 n[space]移 ...

  8. jquery.fileupload-image-editor.js

    jquery.fileupload-image-editor.js中 _initEventHandlers: function () { this._super(); var handlers = { ...

  9. [论文理解] Squeeze-and-Excitation Networks

    Squeeze-and-Excitation Networks 简介 SENet提出了一种更好的特征表示结构,通过支路结构学习作用到input上更好的表示feature.结构上是使用一个支路去学习如何 ...

  10. win 10 hosts文件不生效

    win 10 hosts文件不生效       windows 10 hosts文件修改了,但是怎么都无法在浏览器中进行解析.一直都在等待,直到链接超时. 最后解决办法: 把hosts文件内容复制出来 ...