[BZOJ 1698] 荷叶池塘
[题目链接]
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] 荷叶池塘的更多相关文章
- 「BZOJ 1698」「USACO 2007 Feb」Lilypad Pond 荷叶池塘「最短路」
题解 从一个点P可以跳到另一个点Q,如果Q是水这条边就是1,如果Q是荷叶这条边权值是0.可以跑最短路并计数 问题是边权为0的最短路计数没有意义(只是荷叶的跳法不同),所以我们两个能通过荷叶间接连通的点 ...
- BZOJ1698: [Usaco2007 Feb]Lilypad Pond 荷叶池塘
一傻逼题调了两天.. n<=30 * m<=30的地图,0表示可以放平台,1表示本来有平台,2表示不能走,3起点4终点,走路方式为象棋的日字,求:从起点走到终点,至少要放多少平台,以及放平 ...
- bzoj usaco 金组水题题解(2.5)
bzoj 2197: [Usaco2011 Mar]Tree Decoration 树形dp..f[i]表示处理完以i为根的子树的最小时间. 因为一个点上可以挂无数个,所以在点i上挂东西的单位花费就是 ...
- bzoj Usaco补完计划(优先级 Gold>Silver>资格赛)
听说KPM初二暑假就补完了啊%%% 先刷Gold再刷Silver(因为目测没那么多时间刷Silver,方便以后TJ2333(雾 按AC数降序刷 ---------------------------- ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ-USACO被虐记
bzoj上的usaco题目还是很好的(我被虐的很惨. 有必要总结整理一下. 1592: [Usaco2008 Feb]Making the Grade 路面修整 一开始没有想到离散化.然后离散化之后就 ...
- BZOJ 3385: [Usaco2004 Nov]Lake Counting 数池塘
题目 3385: [Usaco2004 Nov]Lake Counting 数池塘 Time Limit: 1 Sec Memory Limit: 128 MB Description 农夫 ...
- 最短路【洛谷P1606】 [USACO07FEB]荷叶塘Lilypad Pond
P1606 [USACO07FEB]荷叶塘Lilypad Pond 为了让奶牛们娱乐和锻炼,农夫约翰建造了一个美丽的池塘.这个长方形的池子被分成了M行N列个方格(1≤M,N≤30).一些格子是坚固得令 ...
- 洛谷 P1606 [USACO07FEB]荷叶塘Lilypad Pond 解题报告
P1606 [USACO07FEB]荷叶塘Lilypad Pond 题目描述 FJ has installed a beautiful pond for his cows' aesthetic enj ...
随机推荐
- CAD执行一个带参数的命令(com接口VB语言)
主要用到函数说明: MxDrawXCustomFunction::Mx_SendStringToExecute 执行一个带参数的命令.详细说明如下: 参数 说明 CString sCmaName 命令 ...
- JAVA程序员面试笔试宝典3
1.什么是线程?它与进程有什么区别?为什么要使用多线程 线程是指程序在执行过程中,能够执行程序代码的一个执行单元.进程是指一段正在执行的程序. 使用多线程可以减少程序的相应时间 与进程相比,线程的创建 ...
- JAVA基础——链表结构之双端链表
双端链表:双端链表与传统链表非常相似.只是新增了一个属性-即对最后一个链结点的引用 如上图所示:由于有着对最后一个链结点的直接引用.所以双端链表比传统链表在某些方面要方便.比如在尾部插入一个链结点.双 ...
- 洛谷 4364 [九省联考2018]IIIDX
[题解] 一眼可以想到一个类似二叉树后序遍历的贪心做法,然而这个做法在有相同数字的情况下是错误的.最简单的反例就是n=4,d={1,1,1,2},正解是1,1,2,1,而贪心是1,1,1,2. 所以这 ...
- 关于pom.xml中的dependency中的顺序
特别注意: <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>l ...
- noip模拟赛 柜(暴力)
分析:暴力的方法是非常显然的,从起点走一次,从终点走一次,路径相交的点即为所求,但是这样存图都很难存下,而且如果数据极端可能要求R*C次,时间空间都受不了.如果不需要记录整张图,并且一次能移动很多步就 ...
- 关于使用freemarker导出word
java使用FreeMarker导出word 一. 先做一个word模板 二. 将该word文件另存为xml格式(注意是另存为,不是直接改扩展名) 三. 打开xml文件把要 ...
- yum 源本地化 (two)
之前写过一个yum源本地化的文章. 后来发现那个方法有些缺陷, yum install --downloadonly --downloaddir=/tmp/atomicdownload memcach ...
- 关于SVN版本冲突问题
版本冲突原因: 假设A.B两个用户都在版本号为100的时候,更新了kingtuns.txt这个文件,A用户在修改完成之后提交kingtuns.txt到服务器,这个时候提交成功,这个时候kingtuns ...
- 【CV论文阅读】Network in Network
目的: 通过用Mlpconv层来替代传统的conv层,可以学习到更加抽象的特征.传统卷积层通过将前一层进行了线性组合,然后经过非线性激活得到(GLM),作者认为传统卷积层的假设是基于特征的线性可分.而 ...