2.slf + swap优化:在slf的基础上 + swap,即每次队列发生改变时,都进行判断,若dis[队头] > dis[队尾],则交换队头和队尾。 1 2 3 4 5 6 7 8 9 10 voidupdate() { if(Q.empty()) return; else { if(dis[Q.front()] > dis[Q.back()]) swap(Q.front(), Q.back()); } } 3.slf ...
优化1:SLF 如果当前要入队一个点i,如果d[i] < d[head] (比队首要优)就放入队首,否则就放入队尾。这个本来要用一个双端队列来实现的,但是要一个超级好实现的方法,但是比较水,但是实测很快,加进来一个tail后,如果d[data[head+1]]>d[data[tail]] (d表示距离),那么swap(data[head+1],data[tail])。
并且每次更新会导致一次特别长的迭代,类似菊花图的根),那么它在队列中的优先级就会降低,就像你知道出题人用这个点来卡你,你竟然还把它最先拿来最先更新,肯定是不够好的;至于swap-SLF...我也没有搞懂为什么这个优化
容错后的SLF 定义容错值,当满足时从队尾插入,否则从队首插入。mcfx优化定义区间,当入队节点的入队次数属于这个区间的时候,从队首插入,否则从队尾插入。Swap-SLF 若队列改变且,交换队首队尾 代码实现以及评测 (这几个优化已经能过数据不刁钻的卡spfa的题,至于lg的模板…fstqwq就是看着这几个优化 来卡的...
SLF + swap:每当队列改变时,如果队首距离大于队尾,则交换首尾。这个 SLF 看起来很弱,但却通过了...
SLF + swap:每当队列改变时,如果队首距离大于队尾,则交换首尾。这个 SLF 看起来很弱,但却通过了...
swap-SLF :https://www./recordnew/show/14512493 (这几个优化已经能过数据不刁钻的卡spfa的题,至于lg的模板…fstqwq就是看着这几个优化来卡的…) Q:为什么这几种优化有用? A:具体我也没有在网上找到,我说说自己理解的吧。容错SLF可以让你的程序不陷入局部最优解,与模拟退火类似;而mcfx优化是这样的,如过...
\(W\)一般設為所有邊權的和的開方,即\(\sqrt{sum}\)。 mcfx 最佳化 在第\(\left[L, R\right]\)次訪問一個結點時,將其放入隊首,否則放入隊尾。通常取\(L = 2, R = \sqrt{\left|V\right|}\)。 SLF + swap 最佳化 每當佇列改變時,如果隊首距離大於隊尾,則交換首尾。
容错SLF+MCFX :https://www.luogu.org/record/show?rid=14511935 swap-SLF :https://www.luogu.org/recordnew/show/14512493 (这几个优化已经能过数据不刁钻的卡spfa的题,至于lg的模板...fstqwq就是看着这几个优化来卡的...) QQ :为什么这几种优化有用?
容错SLF优化: 如果f[now]>f[q.front()]+valf[now]>f[q.front()]+val,插入队尾,否则插入队首。val是一个容错值,val=sqrt(权值)/100val=sqrt(权值)/100(可能是除以100~300之间的数) Swap-SLF优化: 若队列改变且 f[q.front()]>f[q.back()]f[q.front()]>f[q.back()] ,交换队首队尾. 本...