题解 P2960 【[USACO09OCT]Milkweed的入侵Invasion of the Milkweed】
首先这道题是一道经典的BFS。非常适合刚刚学习深搜的同学。
现在分析一下这个问题。首先,每周是八个方向。就是一圈。
也就是说入侵的范围关于时间是成辐射型扩散。让求最大时间。
也就是完美的BFS。算出来之后,维护一个最大用时就好。
不过说一句。这个数区范围对于一个不会stl的人来说可以直接手写队列。
好了上代码:
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;//头文件不说
int dx[]={,,,-,,,-,-};
int dy[]={,,-,,,-,,-};//定义八个方向
int dis[][];//储存所需要的时间
int n,m;int ans;//ans是需要维护的最大值。
int head=;int tail=;//定义队列。注意队头队尾是1!;
bool book[][];//图
int q[][];//手写队列,第二维一个是横坐标,一个是纵坐标
int mx;int my;//初始位置
int main()
{
scanf("%d%d%d%d",&n,&m,&mx,&my);//输入并且处理
for(int i=;i<=m;i++)
{
for(int j=;j<=n;j++)
{
char now;
cin>>now;
if(now=='.') book[i][j]=true;
else book[i][j]=false;
}
}//注意我的建图顺序
/* for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
printf("%d ",book[i][j]);
}
printf("\n");
}
*///测试点
q[][]=m-my+;//把起始点压进队列
q[][]=mx;
dis[my][m-my+]=;//初始化
while(head<=tail)//判断是否为空队列
{
int now_x=q[head][];
int now_y=q[head][];
int tx,ty;
head++;//取出队头横纵坐标
for(int i=;i<;i++)//八个方向
{
tx=now_x+dx[i];ty=now_y+dy[i];
if(book[tx][ty]==true&&!dis[tx][ty])
/*
这里有个小优化。就是判断能不能走之后。如果搜过了(dis[tx][ty]!=0)就可以不搜了。因为一定会重,直接跳过。
*/
{
dis[tx][ty]=dis[now_x][now_y]+;
q[++tail][]=tx;
q[tail][]=ty;//判断,更新,入队
}
}
}
/* for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
printf("%d ",dis[i][j]);
}
printf("\n");
}*///测试数据 for(int i=;i<=m;i++)
{
for(int j=;j<=n;j++)
{
ans=max(ans,dis[i][j]);
}
}//找最大值
printf("%d",ans);//输出
return ;//程序拜拜
}
实际上我最后67行开始可以有一个优化。就是在更新的时候就连ans一起维护了。就像这样
//54行开始
if(book[tx][ty]==true&&!dis[tx][ty])
{
dis[tx][ty]=dis[now_x][now_y]+;
ans=max(ans,dis[tx][ty]);
q[++tail][]=tx;
q[tail][]=ty;
}
}
}
printf("%d",ans);
return ;
题解 P2960 【[USACO09OCT]Milkweed的入侵Invasion of the Milkweed】的更多相关文章
- 洛谷 P2960 [USACO09OCT]Milkweed的入侵Invasion of the Milkweed
P2960 [USACO09OCT]Milkweed的入侵Invasion of the Milkweed 题目描述 Farmer John has always done his best to k ...
- 3406: [Usaco2009 Oct]Invasion of the Milkweed 乳草的入侵
3406: [Usaco2009 Oct]Invasion of the Milkweed 乳草的入侵 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 8 ...
- [USACO09OCT]Invasion of the Milkweed】乳草的侵占-C++
Farmer John一直努力让他的草地充满鲜美多汁的而又健康的牧草.可惜天不从人愿,他在植物大战人类中败下阵来.邪恶的乳草已经在他的农场的西北部份占领了一片立足之地. 草地像往常一样,被分割成一个高 ...
- BZOJ-USACO被虐记
bzoj上的usaco题目还是很好的(我被虐的很惨. 有必要总结整理一下. 1592: [Usaco2008 Feb]Making the Grade 路面修整 一开始没有想到离散化.然后离散化之后就 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 题解 P2955 【[USACO09OCT]奇数偶数Even? Odd? 】
很明显这题是个假入门! 小金羊一不小心点进题解发现了内幕 能看的出来都WA过Unsigned long long int 做题可以用Python,Python的变量虽然 强悍的不行! 但是我们可以用字 ...
- 洛谷P1339 [USACO09OCT]热浪Heat Wave 题解
题目传送门 这道题实际非常简单好奇是怎么变黄的... 其实也就是一个SPFA,本人非常懒,不想打邻接表,直接用矩阵就好啦... #include<bits/stdc++.h> using ...
- 洛谷 P2639 [USACO09OCT]Bessie的体重问题Bessie's We… 题解
题目传送门 这也是个01背包,只是装的很... #include<bits/stdc++.h> #define MAXN 45010 using namespace std; int f[ ...
- 题解 P1339 【[USACO09OCT]热浪Heat Wave】
题目链接 这道题纯属是一个裸的SPFA: 建议先把模板AC之后再做. 只需要做一些手脚,就是在加边的时候加一个双向边就好. 然后再第一次加点的时候 看不懂模板的出门左转度娘. 推荐下面一片讲解: 友链 ...
随机推荐
- 【284】◀▶ arcpy.da & arcpy 数据访问模块
使用游标访问数据 数据访问模块 (arcpy.da) 参考: ArcGIS Python编程案例(9)-ArcPy数据访问模块 读取几何 写入几何 使用 Python 指定查询 01 da.Sea ...
- C语言语法目录二
1.char类型 char c;定义了一个char变量 'a' ; char常量 char的本质就是一个整数,一个只有一个字节大小的整数 char c; 定义一个有符号的char unsigned c ...
- PHP内核介绍及扩展开发指南—Extensions 的编写
Extensions 的编写 理解了这些运行机制以后,本章着手介绍Extensions 的编写,但凡写程序的人都知道hello world,那好,就从hello world开始. 1.1Hello W ...
- eclipse检测不到android的手机
eclipse检测不到android设备我们一般重启adb server但是一般不管用,下面是重启adb server adb kill-server 可能出现“服务没有运行”的提示信息如下: * s ...
- 258. Add Digits 数位相加到只剩一位数
[抄题]: Given a non-negative integer num, repeatedly add all its digits until the result has only one ...
- Servlet和JSP简述
什么是Servlet和JSP 用Java开发Web应用程序时用到的技术主要有两种,即Servlet和JSP. Servlet是在服务器端执行的Java程序,一个被称为Servlet容器的程序(其实就是 ...
- 37.ROUND() 函数
ROUND() 函数 ROUND 函数用于把数值字段舍入为指定的小数位数. SQL ROUND() 语法 SELECT ROUND(column_name,decimals) FROM table_n ...
- Installing R under Unix-alikes
Linux上R的安装 可参考https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Installing-R-under-Unix_ ...
- Luogu 4473 [国家集训队]飞飞侠
BZOJ 2143 新技能:并查集优化最短路. 暴力最短路是$O(n^4)$的,然后拿个线段树优化一下连边就$O($能过$)$了. 但是这样都太慢了. 我们考虑一个点如果之前被更新过了,那么之后就不会 ...
- spring.net 集成nhibernate配置文件(这里暴露了GetCurrentSession 对于 CurrentSession unbond thread这里给出了解决方法)
我这里主要分成了两个xml来进行spring.net管理实际情况中可自己根据需要进行分类 Dao2.xml <?xml version="1.0" encoding=&quo ...