随笔分类 -  最短路径

1
摘要:首先找出任意一条1~n的最短路径。显然删除的边只有在该最短路上才会对最短路长度产生影响。 不会证明地给出一个找不到反例的结论:删除一条边后,新图中一定有一条1~n的最短路径上存在一条边x->y,满足在原图中1~x的最短路和y~n的最短路上该删除边均不是必经边。 另一个显然的结论是,原图中经过边x-> 阅读全文
posted @ 2019-05-17 16:27 Gloid 阅读(248) 评论(0) 推荐(0)
摘要:本以为是个二进制分组傻逼题https://www.cnblogs.com/Gloid/p/9545753.html,实际上有神仙的一个log做法https://www.cnblogs.com/asuldb/p/10721251.html。下面代码是二进制分组的。 阅读全文
posted @ 2019-04-17 18:28 Gloid 阅读(250) 评论(0) 推荐(0)
摘要:容易想到把边当成点重建图跑最短路。将每条边拆成入边和出边,作为新图中的两个点,由出边向入边连边权为原费用的边。对于原图中的每个点,考虑由其入边向出边连边。直接暴力两两连边当然会被卡掉,注意到其边权是trie上lca的深度,由lca转rmq的做法可知,两点lca即为欧拉序区间中它们之间深度最小的点,于 阅读全文
posted @ 2019-02-02 16:27 Gloid 阅读(232) 评论(0) 推荐(0)
摘要:首先一般化的将下水道和塌陷看成一个东西。注意到在从源点出发的所有需要使用某条下水道的最短路径中,该下水道只会被使用一次,该下水道第一个被访问的点相同,且只会在第一个访问的点使用该下水道。这个第一个访问的点显然就是正常dij过程中,该下水道第一个被取出的点。 于是在dij过程中,取出了某个点进行更新后 阅读全文
posted @ 2019-01-15 23:50 Gloid 阅读(741) 评论(0) 推荐(1)
摘要:斯坦纳树板子题。 考虑状压dp,设f[i][j][S]表示当前在点(i,j)考虑转移,其所在的联通块包含的关键点集(至少)为S的答案。 转移时首先枚举子集,有f[i][j][S]=min{f[i][j][x]+f[i][j][y]-a[i][j]} (x&y=0,x|y=S)。 然后考虑从点(i,j 阅读全文
posted @ 2019-01-11 20:05 Gloid 阅读(184) 评论(0) 推荐(0)
摘要:按海拔从大到小合并建出kruskal重构树,这样就能知道开车能到达哪些点,对这些点到1的最短路取min即可。最难的部分在于多组数据的初始化和数组大小的设置。 阅读全文
posted @ 2018-12-26 01:54 Gloid 阅读(181) 评论(0) 推荐(0)
摘要:跑一遍dij根据最短路DAG进行拓扑排序,按拓扑序dp即可。wa了三发感觉非常凉。 阅读全文
posted @ 2018-11-08 19:34 Gloid 阅读(181) 评论(0) 推荐(0)
摘要:对反图跑最短路求出每个点到终点的最短路径,令其为估价函数大力A*,第k次到达某个点即是找到了到达该点的非严格第k短路,因为估价函数总是不大于实际值。bzoj可能需要手写堆。正解是可持久化可并堆,至今是第二次见到这个那当然是不学啦。 阅读全文
posted @ 2018-11-08 12:47 Gloid 阅读(200) 评论(0) 推荐(0)
摘要:首先跑正反两遍dij求由起点/终点到某点的最短路条数,这样条件一就转化为f(S,A)*f(T,A)+f(S,B)*f(T,B)=f(S,T)。同时建出最短路DAG,这样图中任何一条S到T的路径都是最短路径,对于条件二就只需要判断A是否能走到B。注意到空间开的非常大。那么对于条件二的可达性显然是可以b 阅读全文
posted @ 2018-11-07 17:32 Gloid 阅读(215) 评论(0) 推荐(0)
摘要:感觉比较套路,每次在长边中轴线处切一刀,求出切割线上的点对矩形内所有点的单源最短路径,以此更新每个询问,递归处理更小的矩形。因为若起点终点跨过中轴线是肯定要经过的,而不跨过中轴线的则可以选择是否经过中轴线,若不经过一定就在矩形的某一半了。复杂度O((nm)1.5log(nm)),不太会证。 阅读全文
posted @ 2018-10-30 17:38 Gloid 阅读(139) 评论(0) 推荐(0)
摘要:小凯的疑惑升级版的升级版。答案若存在不会超过30002-3000,暴力dp似乎勉强可以过。当然这不优美。 注意到如果能拼出长度为l的围栏,就一定能拼出长度为l+kx的围栏,其中x为最短的(或任意一个)围栏长度。这样将值域范围缩小到了3000以内。于是将同余类间连长为木料长度的边,求出0为源点到每个点 阅读全文
posted @ 2018-10-28 23:00 Gloid 阅读(163) 评论(0) 推荐(0)
摘要:一个暴力的做法是把边看成点,之间的边权为两边的较大权值,最短路即可。但这样显然会被菊花图之类的卡掉。 考虑优化建图。将边拆成两个有向边,同样化边为点。原图中同一条边在新图中的两个点之间连边权为原边权的边。对于原图同一点的出边按权值从小到大排序,权值相邻的由小到大连边权为差值的边,由大到小连边权为0的 阅读全文
posted @ 2018-10-23 21:02 Gloid 阅读(178) 评论(0) 推荐(0)
摘要:事实上每次走到横坐标或纵坐标最接近的点一定可以取得最优方案。于是这样连边跑最短路就可以了。 阅读全文
posted @ 2018-10-22 01:04 Gloid 阅读(204) 评论(0) 推荐(0)
摘要:先不考虑只有一个显得有些特殊的天兵。 可以发现超能力的作用实质上是使兵更换职业。每一个兵到达某个位置最少需要更换职业的次数是彼此独立的,因为如果需要某两人互换职业可以使他们各自以当前职业到达需要到的地方,不会造成其中一个次数增加。 于是预处理出每个兵到达每个位置的最少代价。之后二分答案,把每个兵向可 阅读全文
posted @ 2018-09-04 22:21 Gloid 阅读(330) 评论(0) 推荐(0)
摘要:如果对某个点能求出与其相邻的所有点到达出口的最短时间,那么该点的答案就可以在其中取次小值了。 对于dijkstra魔改一下就能做到这个。初始时将所有出口的最短时间设为0并放入堆,记录最短和次短路径,每个点更新后将次短路径入堆。 阅读全文
posted @ 2018-09-04 14:13 Gloid 阅读(207) 评论(0) 推荐(0)
摘要:虽然不一定每次都是由编号小的点向编号大的走,但一个人摧毁的顺序一定是从编号小的到编号大的。那么在摧毁据点x的过程中,其只能经过编号小于x的点。并且这样一定合法,因为可以控制其他人先去摧毁所经过的点。那么可以floyd求出由摧毁x到摧毁y的最短路径。注意这里也需要更新起点编号大于终点的情况,否则flo 阅读全文
posted @ 2018-08-31 12:20 Gloid 阅读(239) 评论(0) 推荐(0)
摘要:显然这样的路径一定是选择了与1相邻的不同的两点分别作为起点和终点(除1本身)。如果能将每一组起点终点都计算到就可以得出最优解了。暴力显然不行。注意到我们每次求出的是单源最短路径,考虑如何充分利用信息。那么有一种神奇的方法:按照编号的二进制的某一位给所有与1相邻的点分组,一组作为起点另一组作为终点,然 阅读全文
posted @ 2018-08-28 02:31 Gloid 阅读(256) 评论(0) 推荐(0)
摘要:求出最短路后找出可能在最短路上的边,显然割完边后我们需要让图中这样的边无法构成1到n的路径,最小割即可,非常板子。 阅读全文
posted @ 2018-08-26 22:49 Gloid 阅读(236) 评论(0) 推荐(0)
摘要:把每个人的监视范围看成点,相邻的两个监视范围连边,那么跑一遍最短路就可以了(事实上边权都为1可以直接bfs)。显然存在最优路线没有某个时刻同时被多于两人监视,要到达另一个区域的话完全可以经过分界线而不是和其他区域的交点(若两个区域只有一个交点的话是不能直接到达的),总之就是说不用特判同时被多人监视的 阅读全文
posted @ 2018-08-04 12:28 Gloid 阅读(300) 评论(0) 推荐(0)
摘要:显然答案就是最小割。直接跑dinic也能过,不过显得不太靠谱。 考虑更正确的做法。作为一个平面图,如果要把他割成两半,那么显然可以用一条曲线覆盖且仅覆盖所有割边。于是我们把空白区域看成点,隔开他们的边看成边,原图的最小割就是这张新图中能割开原起点和终点的两个区域之间的最短路。 建出来的新图就是原图的 阅读全文
posted @ 2018-08-03 19:52 Gloid 阅读(216) 评论(0) 推荐(0)

1