题目链接 \(Description\) 给定\(n\times m\)的带边权网格图.\(Q\)次询问从点\((x_i,y_i)\)到点\((x_j,y_j)\)的最短路. \(n\times m\leq 2\times 10^4,Q\leq 10^5\). \(Solution\) 对分治线上的每个点进行一次Dijkstra.若该区域点数(面积)为S,则分治线如果选择较短的一边,其上点的个数\(\leq\sqrt S\).每次选较短的分治复杂度\(O(S\sqrt S\log S)\),若不…
题面 https://www.lydsy.com/JudgeOnline/problem.php?id=4456 题解 分治 设当前work的区间为(x1,y1,x2,y2) 我们将长边分成两半 不妨设长边是(x1,x2) 那么令mid=(x1+x2)/2 对于分界线(mid,y1)~(mid,y2)的所有点 我们做最短路 得到分界线上所有点到区间里任意点的最短路 那么对于询问(sx,sy,tx,ty) 我们可以枚举分界线上某一点(mid,y) 并且用dist((mid,y),(sx,sy))+…
4456: [Zjoi2016]旅行者 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 777  Solved: 439[Submit][Status][Discuss] Description 小Y来到了一个新的城市旅行.她发现了这个城市的布局是网格状的,也就是有n条从东到西的道路和m条从南到北 的道路,这些道路两两相交形成n×m个路口 (i,j)(1≤i≤n,1≤j≤m).她发现不同的道路路况不同,所以通过不 同的路口需要不同的时间.通过调查发…
4456: [Zjoi2016]旅行者 https://www.lydsy.com/JudgeOnline/problem.php?id=4456 分析: 每次对当前矩阵按长边化一条分治线,然后在对分治线上的点跑最短路,然后可以处理处过分治线的询问.对于不过分治线的,递归处理. 先写的dijkstra+堆优化,在开O2的情况下可以过,不开O2过不了,卡常~,还是过不了.然后在UOJ的排行榜里(而且UOJ是有大样例的!),看到了两个优化,加上就可以了. 优化:1.代码41行,用上次的遍历结果初始化…
[BZOJ4456][Zjoi2016]旅行者 Description 小Y来到了一个新的城市旅行.她发现了这个城市的布局是网格状的,也就是有n条从东到西的道路和m条从南到北的道路,这些道路两两相交形成n×m个路口 (i,j)(1≤i≤n,1≤j≤m).她发现不同的道路路况不同,所以通过不同的路口需要不同的时间.通过调查发现,从路口(i,j)到路口(i,j+1)需要时间 r(i,j),从路口(i,j)到路口(i+1,j)需要时间c(i,j).注意这里的道路是双向的.小Y有q个询问,她想知道从路口…
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4456 题解: 分治好题.大致做法如下:对于一开始的矩形区域,过较长边的中点把矩形区域分为两个块.然后依次以划分线上的点为起点跑最短路(Dijkstra),尝试以该点为中转点去更新起点和终点都在这个矩形区域内的询问.显然,如果某个询问的起点和终点在划分线的两侧,那么此时一定可以求出该询问的答案,(因为其最短路一定会经过划分线上的点).那么至于起点和终点都在同侧的询问,那么就递归到更小的区域去…
原文链接http://www.cnblogs.com/zhouzhendong/p/8682133.html 题目传送门 - BZOJ4456 题目传送门 - UOJ#184 题意 $n\times m$的网格图$q$次询问两个格子之间的最短路. $n\times m\leq 2\times 10^4,q\leq 10^5$且任何两个相邻格子之间的路径长度$\leq 10^4$. 题解 考虑分治. 对于当前网格图以及起点和终点都在当前网格图内的询问进行处理. 考虑把当前网格图的长边作为分治对象.…
4456: [Zjoi2016]旅行者 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 254  Solved: 162[Submit][Status][Discuss] Description 小Y来到了一个新的城市旅行.她发现了这个城市的布局是网格状的,也就是有n条从东到西的道路和m条从南到北的道路,这些道路两两相交形成n×m个路口 (i,j)(1≤i≤n,1≤j≤m).她发现不同的道路路况不同,所以通过不同的路口需要不同的时间.通过调查发现,…
题目描述 小Y来到了一个新的城市旅行.她发现了这个城市的布局是网格状的,也就是有n条从东到西的道路和m条从南到北的道路,这些道路两两相交形成n*m个路口 (i,j)(1<=i<=n,1<=j<=m). 她发现不同的道路路况不同,所以通过不同的路口需要不同的时间.通过调查发现,从路口(i,j)到路口(i,j+1)需要时间 r(i,j),从路口(i,j)到路口(i+1,j)需要时间c(i,j).注意这里的道路是双向的.小Y有q个询问,她想知道从路口(x1,y1)到路口(x2,y2)最少…
题目链接 bzoj4456: [Zjoi2016]旅行者 题解 网格图,对于图分治,每次从中间切垂直于长的那一边, 对于切边上的点做最短路,合并在图两边的答案. 有点卡常 代码 #include<queue> #include<cctype> #include<cstdio> #include<vector> #include<cstring> #include<algorithm> inline int read() { int x…