D. Treasure Island

dfs大法好==

写半天bfs疯狂MLE

dfs标记掉路上的一些点

然后再跑一遍dfs

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define sc(x) scanf("%I64d",&x);
#define read(A) for(int i=0;i<n;i++)scanf("%I64d",&A[i]);
#define endl '\n'
#define fi first
#define se second
#define si signed
#define P pair<si,si>
#define pb push_back
#define maxn 1000000+100
bool A[maxn];
int n,m;
queue<P>q;
P fa[maxn];
bool vis[maxn];
int cnt=;
bool bfs()
{
while(!q.empty())q.pop();
q.push(P(,));
while(!q.empty())
{
P a=q.front();
q.pop();
si x=a.fi;
si y=a.se;
//B[x*m+y]++;
if(x==n-&&y==m-)
{
// cnt++;
//f=0;
return false;
}
if(x+<n)
{
if(A[(x+)*m+y]==)
{
fa[(x+)*m+y]=P(x,y);
q.push(P(x+,y));
}
}
if(y+<m)
{
if(A[x*m+y+]==)
{
fa[x*m+y+]=P(x,y);
q.push(P(x,y+)); }
}
} return true;
//else return false;
}
bool dfs(int x,int y)
{
vis[x*m+y]=;
int a=x+;
if(x==n-&&y==m-)return true;
if(a<n&&!vis[a*m+y]&&A[a*m+y]==){
if(dfs(a,y))return true;
}
int b=y+;
if(b<m&&!vis[x*m+b]&&A[x*m+b]==){
if(dfs(x,b))return true;
}
return false; }
signed main()
{
sc(n);
sc(m);
int t=;
for(int i=; i<n; i++)
{
getchar();
for(int j=; j<m; j++)
{
A[i*m+j]=(getchar()=='#'?:);
t+=A[i*m+j];
}
}
if(t==&&(n==||m==)){
cout<<<<'\n';
return ;
}
if(t==)
{
cout<<<<'\n';
return ;
}
if(n==||m==){
cout<<<<'\n';
return ;
}
int ans=;
if(!dfs(,)){
cout<<<<'\n';
return ;
}
vis[]=vis[(n-)*m+m-]=;
if(!dfs(,)){
cout<<<<'\n';
return ;
}
cout<<<<'\n';
/* if(bfs())
{
cout<<0<<'\n';
return 0;
}
//cout<<B[1*m+2]<<endl;
P x=fa[(n-1)*m+m-1];
si c,d;
while(true){
c=x.fi,d=x.se;
if(c==0&&d==0)break;
x=fa[c*m+d];
A[c*m+d]=1;
}
if(bfs()){
cout<<1<<'\n';
return 0;
}
cout<<ans<<'\n';
*/
}

D. Treasure Island的更多相关文章

  1. Gym 100971A Treasure Island BFS 思维题

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

  2. [Codeforces 1214D]Treasure Island(dfs)

    [Codeforces 1214D]Treasure Island(dfs) 题面 给出一个n*m的字符矩阵,'.'表示能通过,'#'表示不能通过.每步可以往下或往右走.问至少把多少个'.'变成'#' ...

  3. Treasure Island DFS +存图

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

  4. 【Gym 100971A】Treasure Island

    题意 题目链接给你一个地图,'#'代表水,'.'代表陆地,'?'代表擦去的地图,可能是'#'也可能是'.'.地图中本该只有一块相连的陆地,若只有一种方案则输出确定的地图.若有多种方案,则输出‘Ambi ...

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

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

  6. CodeForces - 1214D D. Treasure Island

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

  7. 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)最少要放多少 ‘ # ’ . 思 ...

  8. Codeforces1214D. Treasure Island (dp + Hash)

    题目链接:传送门 思路: 仔细观察可以发现,答案最多就是2,只要把(2,1)和(1,2)堵住就可以了. 答案是0的情况就是初始状态下,(1,1)就已经不可达(n,m)了,很好判断. 所以重点就是区分答 ...

  9. libconfig第二篇----两个小例子

    本文只看粗体即可,太多catch语句.两个例子均来自libconfig包的example文件夹下面,. 例子一: #include <iostream> #include <ioma ...

随机推荐

  1. 数位dp(不要62)

    http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意:求区间内满足以下条件的数量 1.数位不能出现4,2.任意两相邻数位不能是62. 解法:数位dp[po ...

  2. [LeetCode] 226. 用队列实现栈

    题目链接: https://leetcode-cn.com/problems/implement-stack-using-queues 难度:简单 通过率:59.9% 题目描述: 使用队列实现栈的下列 ...

  3. java使用Callable创建又返回值的线程

    并发编程使我们可以将程序分为很多个分离的,相互之间独立的任务,通过使用多线程的机制,将每个任务都会有一个执行线程来单独的驱动,一个线程是 进程中一个单一顺序控制流,一个进程可以拥有多个线程,也就相当于 ...

  4. NSIS打包软件使用

    NSIS打包软件使用 最近做的一个调用远程桌面的小应用需要打个安装包,并且在安装的时候需要添加注册表,我之前使用的都是"Advanced Installer"来打包应用程序的,这个 ...

  5. npm学习(十二)之高级用法

    如何使用距离标记标记包 如何使用双因素身份验证 如何使用安全令牌 如何从CLI更改配置文件设置 理解包和模块

  6. 获取url中参数值

    function GetRequest() {var url = window.location.href; //获取url中"?"符后的字串var theRequest = ne ...

  7. JVM运行时的内存划分--JDK1.8

    对比JDK1.7,JDK1.8在运行时的内存分配上进行了调整.本篇对JDK1.8版本进行简要介绍. 先以一张图片描述运行时内存: 程序计数器 记录当前线程执行的字节码行号.如果执行的是native方法 ...

  8. Java读取二进制文件的方式

    public static void readFile(String fileName){ File file = new File(fileName); if(file.exists()){ try ...

  9. PHP漏洞函数

    1. is_numeric函数 bool is_numeric ( mixed $var ) 此函数用于判断变量是否数字或者数字字符串,不仅能接受十进制,还能接受十六进制,这样就有了绕过的方法 < ...

  10. mysql主从库配置读写分离以及备份

    1,什么是读写分离?其实就是将数据库分为了主从库,一个主库用于写数据,多个从库完成读数据的操作,主从库之间通过某种机制进行数据的同步,是一种常见的数据库架构.一个组从同步集群,通常被称为是一个“分组” ...