#include<cstdio>
#include<iostream>
#include<queue>
#define inf 1000000000
#define M 155
using namespace std;
int xx[]={,,-,,},yy[]={,,,,-};
int a[M][M],b[M][M],n,m,mx,x1,x2,y1,y2,z1,z2,a1,a2,b1,b2,c1,c2,v[M][M][*M],d[M][M][*M];
char ch;
int ans=inf;
struct data
{
int x,y,w,w1;
};
bool operator>(data a,data b)
{
return a.w>b.w;
}
void dij(int x,int y)
{
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
for(int k=;k<=mx;k++)
{
v[i][j][k]=;
d[i][j][k]=inf;
}
priority_queue<data,vector<data>,greater<data> >q;
v[x][y][]=;
d[x][y][a[x][y]]=b[x][y];
q.push((data){x,y,b[x][y],a[x][y]});
for(;!q.empty()&&(!v[x1][x2][]||!v[y1][y2][]||!v[z1][z2][]);)
{
int x=q.top().x,y=q.top().y,w1=q.top().w1;
q.pop();
if(v[x][y][w1])
continue;
if(w1)
{
for(int i=;i<;i++)
{
int a1=x+xx[i],a2=y+yy[i];
if(a1<||a2<||a1>n||a2>m||v[a1][a2][w1-])
continue;
if(d[x][y][w1]<d[a1][a2][w1-])
{
d[a1][a2][w1-]=d[x][y][w1];
q.push((data){a1,a2,d[x][y][w1],w1-});
}
}
}
else
if(d[x][y][a[x][y]]>d[x][y][]+b[x][y])
{
d[x][y][a[x][y]]=d[x][y][]+b[x][y];
q.push((data){x,y,d[x][y][a[x][y]],a[x][y]});
}
}
for(;!q.empty();q.pop());
return;
}
int main()
{
scanf("%d%d",&n,&m);
mx=n+m-;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
scanf("%d",&a[i][j]);
a[i][j]=min(a[i][j],max(mx-i-j+,i+j-));
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
scanf("%d",&b[i][j]);
scanf("%d%d%d%d%d%d",&x1,&x2,&y1,&y2,&z1,&z2);
dij(x1,x2);
a1=d[y1][y2][];
a2=d[z1][z2][];
dij(y1,y2);
b1=d[x1][x2][];
b2=d[z1][z2][];
dij(z1,z2);
c1=d[x1][x2][];
c2=d[y1][y2][];
if(b1+c1<ans)
{
ch='X';
ans=b1+c1;
}
if(a1+c2<ans)
{
ch='Y';
ans=a1+c2;
}
if(a2+b2<ans)
{
ch='Z';
ans=a2+b2;
}
if(ans>=inf)
printf("NO");
else
printf("%c\n%d",ch,ans);
return ;
}

分层图跑DJ

bzoj 2143: 飞飞侠的更多相关文章

  1. BZOJ 2143 飞飞侠(分层最短路)

    飞飞国是一个N×M的矩形方阵,每个格子代表一个街区.然而飞飞国是没有交通工具的.飞飞侠完全靠地面的弹射装置来移动.每个街区都装有弹射装置.使用弹射装置是需要支付一定费用的.而且每个弹射装置都有自己的弹 ...

  2. BZOJ2143: 飞飞侠

    2143: 飞飞侠 题意: 给出两个 n ∗ m 的矩阵 A,B,以及 3 个人的坐标 在 (i, j) 支付 Ai,j 的费用可以弹射到曼哈顿距离不超过 Bi,j 的位置 问三个人汇合所需要的最小总 ...

  3. 【BZOJ 2143】 飞飞侠

    Description 飞飞国是一个传说中的国度,国家的居民叫做飞飞侠.飞飞国是一个N×M的矩形方阵,每个格子代表一个街区.然而飞飞国是没有交通工具的.飞飞侠完全靠地面的弹射装置来移动.每个街区都装有 ...

  4. 刷题总结——飞飞侠(bzoj2143 最短路)

    题目: Description 飞飞国是一个传说中的国度,国家的居民叫做飞飞侠.飞飞国是一个N×M的矩形方阵,每个格子代表一个街区.然而飞飞国是没有交通工具的.飞飞侠完全靠地面的弹射装置来移动.每个街 ...

  5. BZOJ2143 飞飞侠 & [校内NOIP2018模拟20181026] 最强大脑

    Time Limit: 50 Sec Memory Limit: 259 MB Description 飞飞国是一个传说中的国度,国家的居民叫做飞飞侠.飞飞国是一个N×M的矩形方阵,每个格子代表一个街 ...

  6. Luogu 4473 [国家集训队]飞飞侠

    BZOJ 2143 新技能:并查集优化最短路. 暴力最短路是$O(n^4)$的,然后拿个线段树优化一下连边就$O($能过$)$了. 但是这样都太慢了. 我们考虑一个点如果之前被更新过了,那么之后就不会 ...

  7. bzoj千题计划225:bzoj2143: 飞飞侠

    http://www.lydsy.com/JudgeOnline/problem.php?id=2143 分层图最短路 把能够弹跳的曼哈顿距离看做能量 dp[i][j][k]表示在(i,j)位置,还有 ...

  8. luogu4473 BZOJ2143 2011[国家集训队]飞飞侠

    题目戳这里 有问题可以在博客@ 应该还会有人来看吧,嘻嘻 正题: 题目大意: 题目很清楚,就是一个点有一定的范围,会有一定的花费 求三个点中的任意两个点到另一个点的最小花费 (麻麻教育我千万读好题目( ...

  9. [BZOJ 1800] 飞行棋

    Link: BZOJ 1800 传送门 Solution: $O(n^4)$…… Code: #include <bits/stdc++.h> using namespace std; ] ...

随机推荐

  1. 调整UILabel行高间距并返回自定义宽高度

    // 获取label文字 NSString *labelString = @"XXXXXXXXXXXXXX"; // 设置自定义宽度或高度 CGSize labelSize = C ...

  2. boost中的智能指针

    进行本地线程管理的 thread_specific_ptr 指针: 可以看这里:http://www.kingofcoders.com/viewNews.php?type=newsCpp&id ...

  3. Android广播BroadcastReceiver 一

    Android 系统里定义了各种各样的广播,如电池的使用状态,电话的接收和短信的接收,开机启动都会产生一个广播.当然用户也可以自定义自己的广播. 既然说到广播,那么必定有一个广播发送者,以及广播接收器 ...

  4. Java集合类源码分析

    常用类及源码分析 集合类 原理分析 Collection   List   Vector 扩充容量的方法 ensureCapacityHelper很多方法都加入了synchronized同步语句,来保 ...

  5. 强制关闭tomcat

    ps -ef |grep tomcat //找到tomcat的端口号 kill - tomcatpid

  6. Spring MVC 之请求处理方法可接收参数(三)

    请求处理方法可接收参数 今天学习了前三个方法. 1.作用域对象2.单个表单提交数据3.表单数据封装的Bean对象 首先创建一个实体对象. package com.cy.springannotation ...

  7. 转!!java中关键字volatile的作用

    用在多线程,同步变量. 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B.只在某些动作时才进行A和B的同步.因此存在A和B不一致的情况.volatile就是用来 ...

  8. Openvpn 安装简述

    1.固定本地IP地址 vim /etc/sysconfig/network-scripts/ifcfg-eth0 2.同步时间.安装ntpd yum  install ntpddate netupda ...

  9. Libsvm:脚本(subset.py、grid.py、checkdata.py) | MATLAB/OCTAVE interface | Python interface

    1.脚本 This directory includes some useful codes: 1. subset selection tools. (子集抽取工具) subset.py 2. par ...

  10. Windows菜单

    目录 第1章 Windows菜单    1 1.1 窗口菜单和弹出菜单    1 1.2 使用SetMenu    2 1.3 使用TrackPopupMenu    4 第1章 Windows菜单 ...