传送门

题目描述

分析

因为每次移动的权值不一样,所以肯定不能用BFSBFSBFS求解,不然就是类似于spfaspfaspfa的写法,容易被卡,所以我们可以去暴力建图然后跑堆优化的dij
怎么建图呢,前面的规则都比较方便处理,至于最后一条,我们可以采用拆点的方法,每个点建一个虚点,相邻的虚点之间的移动代价为1,原点到虚点的代价为1,虚点到原点的代价为0即可

代码

#pragma GCC optimize(3)
#include <bits/stdc++.h>
#define debug(x) cout<<#x<<":"<<x<<endl;
#define dl(x) printf("%lld\n",x);
#define di(x) printf("%d\n",x);
#define _CRT_SECURE_NO_WARNINGS
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
typedef vector<int> VI;
const int INF = 0x3f3f3f3f;
const int N = 510,M = N * N * 2,P = M * 10;
const ll mod = 1000000007;
const double eps = 1e-9;
const double PI = acos(-1);
template<typename T>inline void read(T &a) {char c = getchar(); T x = 0, f = 1; while (!isdigit(c)) {if (c == '-')f = -1; c = getchar();}while (isdigit(c)) {x = (x << 1) + (x << 3) + c - '0'; c = getchar();} a = f * x;
}
int gcd(int a, int b) {return (b > 0) ? gcd(b, a % b) : a;}
int n,m;
int a[N][N],b[N][N];
int h[M],ne[P],e[P],w[P],idx;
bool st[M];
int d[M];void add(int x,int y,int z){ne[idx] = h[x],e[idx] = y,w[idx] = z,h[x] = idx++;
}int get_id(int x,int y){return (x - 1) * m + y;
}void dij(){memset(d,0x3f,sizeof d);d[1] = 0;priority_queue<PII,vector<PII>,greater<PII> > Q;Q.push(PII(0,1));while(Q.size()){PII p = Q.top();Q.pop();int t = p.second;if(st[t]) continue;st[t] = true;for(int i = h[t];i != -1;i = ne[i]){int j = e[i];if(d[j] > d[t] + w[i]){d[j] = d[t] + w[i];Q.push(PII(d[j],j));}}}
}int main() {read(n),read(m);for(int i = 1;i <= n;i++)for(int j = 1;j < m;j++)read(a[i][j]);for(int i = 1;i < n;i++)for(int j = 1;j <= m;j++)read(b[i][j]);memset(h,-1,sizeof h);for(int i = 1;i <= n;i++)for(int j = 1;j <= m;j++){if(j + 1 <= m)add(get_id(i,j),get_id(i,j + 1),a[i][j]);if(j - 1 >= 1)add(get_id(i,j),get_id(i,j - 1),a[i][j - 1]);if(i + 1 <= n)add(get_id(i,j),get_id(i + 1,j),b[i][j]);}for(int i = 1;i <= n;i++)for(int j = 1;j <= m;j++){add(get_id(i,j),get_id(i,j) + n * m,1);add(get_id(i,j) + n * m,get_id(i,j),0);if(i > 1) add(get_id(i,j) + n * m,get_id(i - 1,j) + n * m,1);}dij();di(d[get_id(n,m)]);return 0;
}/**
*  ┏┓   ┏┓+ +
* ┏┛┻━━━┛┻┓ + +
* ┃       ┃
* ┃   ━   ┃ ++ + + +
*  ████━████+
*  ◥██◤ ◥██◤ +
* ┃   ┻   ┃
* ┃       ┃ + +
* ┗━┓   ┏━┛
*   ┃   ┃ + + + +Code is far away from  
*   ┃   ┃ + bug with the animal protecting
*   ┃    ┗━━━┓ 神兽保佑,代码无bug 
*   ┃        ┣┓
*    ┃        ┏┛
*     ┗┓┓┏━┳┓┏┛ + + + +
*    ┃┫┫ ┃┫┫
*    ┗┻┛ ┗┻┛+ + + +
*/

ZONe Sneaking 优化建图 + 最短路相关推荐

  1. CodeForces - 787D - Legacy(线段树优化建图+最短路)

    题目链接:点击查看 题目大意:给出 nnn 个点和 mmm 条边,现在需要求从 ststst 开始到所有点的最短路是多少,mmm 条边的给出方式如下: 1uvw1 \ u \ v \ w1 u v w ...

  2. CodeForces---787D:Legacy【线段树优化建图+最短路】

    题目: 戳这里啊~~~ 题意: 给你三种操作:(1)点到点建边:(2)点到区间建边:(3)区间到点建边:最后求起点到其他点的最短距离 分析: 最短距离无非建边跑Dijkstra即可,考虑如何对区间建边 ...

  3. Gym - 102174G 神圣的 F2 连接着我们 (线段树优化建图 + 多源最短路)

    Description 小白非常喜欢玩 "县际争霸" 这款游戏,虽然他的技术并不容乐观."县际争霸" 的地图共有两个县,每个县里各有 n n n 个据点.同一个 ...

  4. P6348 [PA2011]Journeys 线段树优化建图 区间连区间

    传送门 文章目录 题意: 思路: 题意: 每次连接[a,b][a,b][a,b]与[c,d][c,d][c,d]之间所有点,让后跑最短路. 思路: 比普通的优化建图能简单点,我们只需要加两个虚点之间边 ...

  5. Codeforces 786B Legacy (线段树优化建图)

    Codeforces 786B Legacy (线段树优化建图) 题意:\(n\)个点,有\(3\)种连边操作:1.将\(u\)指向\(v\):2.将\(v\)指向编号在区间\([l,r]\)的点:3 ...

  6. 线段树优化建图详解——区间连边之技巧,吊打紫题之利器

    我们从一道例题开始. CF786B Description Solution 朴素解法: 暴力连边+最短路 对于每次连边操作,我们逐一连边,最后在图上跑一遍单源最短路径算法即可. 时间复杂度 O ( ...

  7. P6378 [PA2010] Riddle(2-sat/前后缀优化建图)

    P6378 [PA2010] Riddle n个点m条边的无向图,分为k个部分,从每个部分选择恰好一个关键点,使得每条边至少有一个端点是关键点. 首先有这么多的限制,实际上就是一个选或者不选的问题,每 ...

  8. 【CF1045A】A Last chance【贪心】【线段树优化建图】【网络流构造方案】

    题意:有nnn个武器和mmm个飞船,武器有下面三种 从给定的集合SSS中击破一个. 在给定的区间[L,R][L,R][L,R]中击破一个. 对于给定的a,b,ca,b,ca,b,c,选择000个或22 ...

  9. 高精地图构建与SLAM感知优化建图策略

    高精度地图对自动驾驶系统功能研发的影响已经越来越明显,整体上来讲主要包含但不仅限于提升车端感知性能.拓展自动驾驶新功能.动态建图等相关应用.具体体现在如下几个重要方面: 如上所述提升车端感知能力是通过 ...

最新文章

  1. python re.match、re.search以及re.findall的区别
  2. 应对百度算法调整的三大优化技巧
  3. 求助:国际化中资源文件不在classpath中的问题
  4. C语言switch分支结构
  5. Xilinx Platform Cable USB II 下载器驱动安装教程——Win10
  6. 学习PHP时的一些总结(五)
  7. 我的世界html导入整合包教程,《我的世界手机版》如何制作一个整合包教程攻略...
  8. 巧用HashSet装载非重数据(洛谷P2250题题解,Java语言描述)
  9. lambda 对象初始化器 集合初始化器
  10. [转自华尔街的强帖]怎样才能嫁给有钱人
  11. 人工智能在电力行业的应用,电力人工智能技术
  12. 中国1-4线城市互联网价值分布
  13. DD 虚拟键盘驱动无法卸载问题
  14. 依图科技发布语音开放平台,联袂微软、华为撬动语音市场
  15. Nodejs框架+uniapp前端微商个人相册多端小程序
  16. U盘中毒后怎么恢复数据
  17. 区块链巨头2018:几家欢喜几家愁 |链捕手
  18. java解析excel合并单元格,100%好评!
  19. WiFi 协议漏洞可用于劫持网络流量
  20. ISO9001内审员需要知道的内容分享

热门文章

  1. [工具使用]搜索引擎 Hacking
  2. js获取最新的省市区地址
  3. HEVC帧内预测参考像素检测获取和滤波
  4. 4.龙芯2k1000 系统制作及安装
  5. ubuntu 切换中文输入法
  6. Revit-BIM模型轻量化 帧率控制
  7. 一封超级牛的数据库程序员的情书表白
  8. 佳能e478打印机怎么连接wifi
  9. Mac电脑怎么关闭键盘的重复按键功能?
  10. java抠图边框颜色处理_ps抠图边缘颜色怎么处理