洛谷的数据毒啊

把(i,j,k)作为一个点spfa,表示点(i,j)朝向k方向,然后向四个方向转移即可

#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
const int N=105,inf=1e9,dx[]={-1,1,0,0},dy[]={0,0,-1,1};
int n,sx,sy,tx,ty,dis[N][N][5];
char a[N][N];
bool v[N][N][5];
struct qwe
{
int x,y,k;
qwe(int X=0,int Y=0,int K=0)
{
x=X,y=Y,k=K;
}
};
inline bool ok(int x,int y)
{
return x>=1&&x<=n&&y>=1&&y<=n&&a[x][y]!='x';
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%s",a[i]+1);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(a[i][j]=='A')
sx=i,sy=j;
if(a[i][j]=='B')
tx=i,ty=j;
for(int k=0;k<4;k++)
dis[i][j][k]=inf;
}//cerr<<sx<<" "<<sy<<" "<<tx<<" "<<ty<<endl;
queue<qwe>q;
v[sx][sy][0]=1,v[sx][sy][1]=1,v[sx][sy][2]=1,v[sx][sy][3]=1;
dis[sx][sy][0]=0,dis[sx][sy][1]=0,dis[sx][sy][2]=0,dis[sx][sy][3]=0;
q.push(qwe(sx,sy,0)),q.push(qwe(sx,sy,1)),q.push(qwe(sx,sy,2)),q.push(qwe(sx,sy,3));
while(!q.empty())
{
int x=q.front().x,y=q.front().y,k=q.front().k;
q.pop();
v[x][y][k]=0;
for(int i=0;i<4;i++)
if(ok(x+dx[i],y+dy[i])&&dis[x+dx[i]][y+dy[i]][i]>dis[x][y][k]+(k!=i))
{
dis[x+dx[i]][y+dy[i]][i]=dis[x][y][k]+(k!=i);
if(!v[x+dx[i]][y+dy[i]][i])
{
v[x+dx[i]][y+dy[i]][i]=1;
q.push(qwe(x+dx[i],y+dy[i],i));
}
}
}
// for(int i=1;i<=n;i++)
// for(int j=1;j<=n;j++)
// for(int k=0;k<4;k++)
// cerr<<i<<" "<<j<<" "<<k<<" "<<dis[i][j][k]<<endl;
printf("%d\n",min(min(dis[tx][ty][0],dis[tx][ty][1]),min(dis[tx][ty][2],dis[tx][ty][3])));
return 0;
}
/*
3
.xA
...
Bx.
*/

bzoj 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课【spfa】的更多相关文章

  1. BZOJ 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课( BFS )

    BFS... 我连水题都不会写了QAQ ------------------------------------------------------------------------- #inclu ...

  2. BZOJ 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课

    题目 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课 Time Limit: 5 Sec  Memory Limit: 64 MB Description 考虑一 ...

  3. 1644: [Usaco2007 Oct]Obstacle Course 障碍训练课

    1644: [Usaco2007 Oct]Obstacle Course 障碍训练课 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 383  Solved ...

  4. 【BZOJ】1644: [Usaco2007 Oct]Obstacle Course 障碍训练课(bfs)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1644 这和原来一题用dp来做的bfs很像啊orz.. 我们设f[i][j][k]代表i,j这个点之前 ...

  5. bzoj1644 [Usaco2007 Oct]Obstacle Course 障碍训练课

    Description 考虑一个 N x N (1 <= N <= 100)的有1个个方格组成的正方形牧场.有些方格是奶牛们不能踏上的,它们被标记为了'x'.例如下图: . . B x . ...

  6. BZOJ 1708: [Usaco2007 Oct]Money奶牛的硬币( dp )

    背包dp.. -------------------------------------------------------------------------------- #include< ...

  7. BZOJ 1708: [Usaco2007 Oct]Money奶牛的硬币

    1708: [Usaco2007 Oct]Money奶牛的硬币 Description 在创立了她们自己的政权之后,奶牛们决定推广新的货币系统.在强烈的叛逆心理的驱使下,她们准备使用奇怪的面值.在传统 ...

  8. BZOJ 1709: [Usaco2007 Oct]Super Paintball超级弹珠

    Description 奶牛们最近从著名的奶牛玩具制造商Tycow那里,买了一套仿真版彩弹游戏设备(类乎于真人版CS). Bessie把她们玩游戏草坪划成了N * N(1 <= N<= 1 ...

  9. bzoj 1709: [Usaco2007 Oct]Super Paintball超级弹珠【枚举】

    k是1e5范围的,吗? 注意到n只有100,这意味着k去重之后之后n^2,也就是1e4! 然后就可以愉快的n^4枚举了,枚举每个格子,再枚举每个敌人,如果当前格子射不到敌人则退出,否则满足所有敌人则a ...

随机推荐

  1. 圆角计算 Shader

    圆角的计算 在Shader中,我们使用UV坐标来计算需要显示的部分和不需要显示的部分,使用透明来处理显示与不显示.UV坐标如下图1,我们将坐标平移到图2位置,面片的UV坐标原点在面片中心,UV坐标范围 ...

  2. Web框架django基础篇

    基本配置及学习  路由(Urls).视图(Views).模板(Template).Model(ORM). 简介 Django 是一个由 Python 写成的开放源代码的 Web 应用框架.它最初是被开 ...

  3. nyoj 96 n-1位数(处理前导 0 的情况)(string)

    n-1位数 时间限制:3000 ms  |            内存限制:65535 KB 难度:1   描述 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则 ...

  4. POJ 1330 (LCA)

    http://poj.org/problem?id=1330 题意:给出一个图,求两个点的最近公共祖先. sl :水题,贴个模板试试代码.本来是再敲HDU4757的中间发现要用LCA,  操蛋只好用这 ...

  5. PatentTips – EMC Virtual File System

    BACKGROUND OF THE INVENTION 1. Field of the Invention The present invention generally relates to net ...

  6. 静态区间第k大(划分树)

    POJ 2104为例[经典划分树问题] 思想: 利用快速排序思想, 建树时将区间内的值与区间中值相比,小于则放入左子树,大于则放入右子树,如果相等则放入左子树直到放满区间一半. 查询时,在建树过程中利 ...

  7. [bzoj1874][BeiJing2009 WinterCamp]取石子游戏_博弈论

    取石子游戏 bzoj-1874 BeiJing2009 WinterCamp 题目大意:题目链接. 注释:略. 想法: 我们通过$SG$函数的定义来更新$SG$的转移. 如果是寻求第一步的话我们只需要 ...

  8. Java电商项目-6.实现门户首页数据展示_Redis数据缓存

    目录 项目的Github地址 需求介绍 搭建Redis集群环境 下面先描述单机版redis的安装 下面将进行Redis3主3从集群环境搭建 基于SOA架构, 创建门户ashop-portal-web门 ...

  9. 我的arcgis培训照片4 来自http://www.cioiot.com/successview-549-1.html

  10. Python学习系列之装饰器

    装饰器的作用 装饰器用于装饰某个函数.方法或者类,它可以让这个函数执行之前或者执行之后做一些操作 手工实现一个装饰器 def outer(some_func): #装饰器 $1 def inner() ...