[题目链接]

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. CAD如何设置系统变量

    主要用到函数说明: MxDrawXCustomFunction::Mx_SetSysVar 设置系统变量.详细说明如下: 参数 说明 CString sVarName 系统变量名 Value 需要设置 ...

  2. java Object类中方法介绍

  3. 03Struts2基本使用流程

    Struts2基本使用流程 1.新建web工程 2.引入struts2类库 3.创建并配置Struts2的核心控制器web.xml用来拦截客户端请求并将请求转发到相应的Action类中来处理 4.创建 ...

  4. TWaver矢量小试——Android演进路线图

    还有半个多月就到春节了,年底相信很多公司都会进行年度总结以及公司发展状况总结,在这过程中难免会用到RoadMap,在这我们也使用TWaver的矢量部分绘制一个Android系统的发展历程.先看效果:什 ...

  5. LeetCode_16 3SumCloest

    3Sum Closest Given an array nums of n integers and an integer target, find three integers in nums su ...

  6. 原来 JS 是这样的 - 关于 this

    引子 习惯了别的语言的思维习惯而不专门了解 JavaScript 的语言特性的话,难免踩到一些坑. 上一篇文章 中简单总结了关于 提升, 严格模式, 作用域 和 闭包 的几个常见问题,当然这仅仅是了解 ...

  7. 行内块+calc+margin 三列布局

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  8. 一起看看 scrollHeight,clientHeight,offsetHeight,scrollTop是个啥

    scrollHeight最终数值的组成: var scrollHeight = currentElementContent.height +currentElement.paddingTop+curr ...

  9. [Algorithm] 4. Ugly Number II

    Description Ugly number is a number that only havefactors 2, 3 and 5. Design an algorithm to find th ...

  10. linux下的进程

    一.进程的基础: 1.程序:程序是一些保存在磁盘上的指令的有序集合: 2.进程:进程是程序的一次执行过程: 3.进程与程序的关系:①.程序是静态的,进程是动态的:  ②.一个程序可以对应多个进程:   ...