随笔分类 - 最短路
摘要:"题目" 差分约束+判正环 差分约束: 给定几个形如$a_i b_i=c_i$的不等式。 一般问题都会问$a_i b_j$的最小值或最大值,或者是否所有条件都满足。 松弛操作$dis[now] dis[to]y=c);加入原题要问b a的最大值,则转化到图中就是x到y的最小值因为最大值要所有路径都要
阅读全文
摘要:"题目" 此题目中存在三种棋盘的放置方法(空白,不能活动,能活动)。 而每次变化的格子一定在当前空白格子的周围,因此只需要对空白格子的周围四个状态考虑即可,因此我们设$a[i][j][k]$为白格子在(i,j)的k方向的一个状态,然后我们考虑,如果活动和不能活动的格子已经确定了,那么如果按照暴力的解
阅读全文
摘要:"题目" 求树的直径,因为任意两个居住点之间有且只有一条通路,所以这是一棵树。 根据题意父母先从C去A,再去B,或者反过来。 我们一定是要让A到B最大,也要让C到A和B的最小值最大。 AB最大一定就是直径了。 CA最大直接先求出任意一条直径的两个端点,必定一个是A、一个是B。然后枚举C,找到最大的$
阅读全文
摘要:"题目" 图论综合题。 首先我们需要求出所有在公共最短路上的边,可以用预处理出最短路长度,然后枚举每一条边,依次判断即可。然后把这些边建到一个新图里,跑DP就好了。 此题的关键就是求出在公共最短路上的边。 c++ include define N 7001011 using namespace st
阅读全文
摘要:"题目" 二分加最短路。 因为原题中要求给定一个值n和一个次数m,使这个值尽量小的同时存在一条1到n的路径上权值大于该值的边的个数小于次数m。 此时我们发现该值和次数满足单调性,即该值越小个数越多。 因此可以用二分,再考虑如何check 可以将路上的权值是否大于n这一条件做布尔边权值,这样跑出来的最
阅读全文
摘要:SPFA和DIJ求最短路的算法的坑点一直是很多的。经常会让人搞不懂。 易错案例: 用重载运算符来排序,如: 这种做法是不对的,该dis值在堆里不会更新甚至会堵住。 正确案例: 目前只有两种优化算法最可靠,分别为优先队列来优化spfa或dij。 $SPFA$: 每次从堆中只需要取出到t的最短路最小的元
阅读全文
摘要:"题目" 最短路+DP 最短路可以用floyd或者spfa来处理出1到n的所有时间区间的最短路。 $dis[i][j][k][l]$表示i到j在$k,l$时间内每个时间点都能走的节点的$i,j$之间的最短路。 因此我们可以预处理出来最短路,然后开始DP,设置$dp[i]$为1到i之间的所有时间的最短
阅读全文
摘要:"题目" 作为$NOIp2017D1T3$ 这个题还是很良心的,至少相对于$NOIp2018$来说,希望$NOIp2019$不会这么坑吧。 这个题可以作为记忆化搜索的进阶题了,做这个题的方法也是多种多样。 $30pts$ 30分可以直接套用最短路计数的模板直接套上就可以了。 $100pts$ 100
阅读全文
摘要:"题目" 这个提示一个简单的最短路计数,除了用数组存上最短路的个数的做法以外,还有可以在得出最短路之后,搜索加剪枝的方法来通过该题。 可以反向搜索用A 的方法来通过,但是这个题的去重十分的恶心,需要一些玄学操作。 $Code$ c++ // luogu judger enable o2 includ
阅读全文
摘要:次短路 次短路,顾名思义即是除了最短路以外最短的路径,如果把最短路比作皇帝,那么次短路就是宰相的关系。 在信息学竞赛中,常常会用两种方法来求次短路。 1.最短路算法 这种和求最短路的方法相同,仅仅只是更改松弛时的操作,就相当于是求一个区间内的最大值和次大值一样,用两个数分别保存最大值和次大值,因此可
阅读全文