[题目链接]

https://www.lydsy.com/JudgeOnline/problem.php?id=1698

[算法]

最短路

[代码]

#include<bits/stdc++.h>
using namespace std;
#define MAXN 35
const int dx[] = {,-,,-,,-,,-};
const int dy[] = {,,-,-,,,-,-}; struct edge
{
int to,nxt;
} e[MAXN * MAXN * MAXN * MAXN]; int n,m,sx,sy,tx,ty,tot;
int head[MAXN * MAXN];
int mp[MAXN][MAXN],dist[MAXN * MAXN];
long long cnt[MAXN * MAXN];
bool visited[MAXN][MAXN]; inline bool valid(int x,int y)
{
return x >= && x <= n && y >= && y <= m;
}
inline int id(int x,int y)
{
return (x - ) * m + y;
}
inline void addedge(int u,int v)
{
tot++;
e[tot] = (edge){v,head[u]};
head[u] = tot;
}
inline void dfs(int nowx,int nowy,int x,int y)
{
for (int i = ; i < ; i++)
{
int nx = nowx + dx[i] , ny = nowy + dy[i];
if (valid(nx,ny) && !visited[nx][ny] && mp[nx][ny] != )
{
visited[nx][ny] = true;
if (!mp[nx][ny] || mp[nx][ny] == ) addedge(id(x,y),id(nx,ny));
else dfs(nx,ny,x,y);
}
}
}
inline void spfa(int x,int y)
{
queue< int > q;
static bool inq[MAXN * MAXN];
memset(inq,false,sizeof(inq));
memset(dist,0x3f,sizeof(dist));
dist[id(x,y)] = ;
cnt[id(x,y)] = ;
q.push(id(x,y));
while (!q.empty())
{
int cur = q.front();
q.pop();
if (cur == id(tx,ty)) continue;
inq[cur] = false;
for (int i = head[cur]; i; i = e[i].nxt)
{
int v = e[i].to;
if (dist[cur] + < dist[v])
{
dist[v] = dist[cur] + ;
cnt[v] = cnt[cur];
if (!inq[v])
{
inq[v] = true;
q.push(v);
}
} else if (dist[cur] + == dist[v]) cnt[v] += cnt[cur];
}
cnt[cur] = ;
}
} int main()
{ scanf("%d%d",&n,&m);
for (int i = ; i <= n; i++)
{
for (int j = ; j <= m; j++)
{
scanf("%d",&mp[i][j]);
if (mp[i][j] == )
{
sx = i;
sy = j;
}
if (mp[i][j] == )
{
tx = i;
ty = j;
}
}
}
for (int i = ; i <= n; i++)
{
for (int j = ; j <= m; j++)
{
memset(visited,false,sizeof(visited));
visited[i][j] = true;
if (mp[i][j] != )
dfs(i,j,i,j);
}
}
spfa(sx,sy);
if (dist[id(tx,ty)] > 1e8)
{
printf("-1\n");
return ;
}
printf("%d\n%lld\n",dist[id(tx,ty)] - ,cnt[id(tx,ty)]); return ;
}

[BZOJ 1698] 荷叶池塘的更多相关文章

  1. 「BZOJ 1698」「USACO 2007 Feb」Lilypad Pond 荷叶池塘「最短路」

    题解 从一个点P可以跳到另一个点Q,如果Q是水这条边就是1,如果Q是荷叶这条边权值是0.可以跑最短路并计数 问题是边权为0的最短路计数没有意义(只是荷叶的跳法不同),所以我们两个能通过荷叶间接连通的点 ...

  2. BZOJ1698: [Usaco2007 Feb]Lilypad Pond 荷叶池塘

    一傻逼题调了两天.. n<=30 * m<=30的地图,0表示可以放平台,1表示本来有平台,2表示不能走,3起点4终点,走路方式为象棋的日字,求:从起点走到终点,至少要放多少平台,以及放平 ...

  3. bzoj usaco 金组水题题解(2.5)

    bzoj 2197: [Usaco2011 Mar]Tree Decoration 树形dp..f[i]表示处理完以i为根的子树的最小时间. 因为一个点上可以挂无数个,所以在点i上挂东西的单位花费就是 ...

  4. bzoj Usaco补完计划(优先级 Gold>Silver>资格赛)

    听说KPM初二暑假就补完了啊%%% 先刷Gold再刷Silver(因为目测没那么多时间刷Silver,方便以后TJ2333(雾 按AC数降序刷 ---------------------------- ...

  5. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  6. BZOJ-USACO被虐记

    bzoj上的usaco题目还是很好的(我被虐的很惨. 有必要总结整理一下. 1592: [Usaco2008 Feb]Making the Grade 路面修整 一开始没有想到离散化.然后离散化之后就 ...

  7. BZOJ 3385: [Usaco2004 Nov]Lake Counting 数池塘

    题目 3385: [Usaco2004 Nov]Lake Counting 数池塘 Time Limit: 1 Sec  Memory Limit: 128 MB Description     农夫 ...

  8. 最短路【洛谷P1606】 [USACO07FEB]荷叶塘Lilypad Pond

    P1606 [USACO07FEB]荷叶塘Lilypad Pond 为了让奶牛们娱乐和锻炼,农夫约翰建造了一个美丽的池塘.这个长方形的池子被分成了M行N列个方格(1≤M,N≤30).一些格子是坚固得令 ...

  9. 洛谷 P1606 [USACO07FEB]荷叶塘Lilypad Pond 解题报告

    P1606 [USACO07FEB]荷叶塘Lilypad Pond 题目描述 FJ has installed a beautiful pond for his cows' aesthetic enj ...

随机推荐

  1. 构造From窗体获取数据库数据,去除数据库中无用信息,并赋值给字段,最后画出图

    private void cbNum_SelectedIndexChanged(object sender, EventArgs e) { FieldListLug.Clear();//继续清除字段 ...

  2. CAD得到所有实体1

    主要用到函数说明: IMxDrawSelectionSet::AllSelect 得到当前空间的所有实体.详细说明如下: 参数 说明 [in,defaultvalue(NULL)] IMxDrawRe ...

  3. 00Extensible Markup Language

    Extensible Markup Language XML(Extensible Markup Language)可扩展标记语言是用来网络数据的组织结构,传输及存储.

  4. MyBatis 的基本介绍及使用

    一.简介 ​ MyBatis 是支持定制化 SQL.存储过程以及高级映射的持久层框架(ORM).MyBatis 可以使用简单的 XML 或 注解用于配置和映射数据表,是将 POJO(Plain Old ...

  5. __cdecl、__stdcall、__fastcall 与 __pascal 浅析

    call 指令与 retn 指令 首先我们得了解 CALL 和 RETN 指令的作用,才能更好地理解调用规则,这也是先决条件. 实际上,CALL 指令就是先将下一条指令的 EIP 压栈,然后 JMP ...

  6. [Algorithm] 5. Kth Largest Element

    Description Find K-th largest element in an array. Example In array [9,3,2,4,8], the 3rd largest ele ...

  7. FileInputStream实现读取文件内容并输出到屏幕上

    java输入输出流是站在程序的角度来说的.从文件中读取数据用输入流,向文件中写数据用输出流. package com.janson.day20180827; import java.io.FileIn ...

  8. Linux 复习四

    第四章 shell程序设计I-入门 一.shell脚本的基本概念 shell脚本(script)是一个可执行的纯文本文件,有多个shell命令组成. 命令的执行时从上而下.从左而右的分析和执行 命令. ...

  9. centos7安装:license information(license not accepted)

    安装centos7的时候明明已经选择了默认的许可证信息,不知道哪里出错了,安装到最后,就会显示license information(license not accepted)的信息.解决方法如下: ...

  10. 【Codeforces 992B】Nastya Studies Informatics

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 因为gcd(a,b)=x 所以设a = nx b = mx 又有ab/gcd(a,b)=lcm(a,b)=y 则nmx = y 即n(m*x) ...