一種卡掉SPFA的簡單方法

2021-10-05 18:58:08 字數 969 閱讀 4729

搬運自知乎問題如何看待 spfa 演算法已死這種說法?下使用者 @immortalco 的回答(侵刪)

該方法同時適用於有向圖和無向圖

① 生成一顆以起點為根的樹,樹高盡量高 ( 如:起點為1的樹,每個點 i 的父親可以在 max(i-5,1) 到 i-1 隨機),邊權隨機,同時還需計算出每個點的深度d[i]。

② 對於剩下的邊,兩端點隨機,邊權在 |d[b]-d[a]| 到 |d[b]-d[a]|+5 隨機(如果是有向圖則去掉絕對值符號,5 可以換成其他較小的正數)

這樣生成的圖中,次短路的條數非常的多,而 spfa 一旦錯誤地進入了次短路的分支,就會使得一整棵子樹被賦錯誤的距離,從而在後期不得不重新更新。而由於邊權接近,剪枝的效果會受到很大影響。

code_example:

const

int maxn =

2e5;

const

int maxm =

2e5;

setint,

int>>s;

int d[maxn]

;void

generate()

for(

int i =

1;i <= m -

(n -1)

;++i)

s.insert

(make_pair

(u,v));

s.insert

(make_pair

(v,u));

int l =

abs(d[u]

- d[v]

), r = l +5;

int t =

(randint

(n)%

(r - l +1)

)+ l;

printf

("%d %d %d\n"

, u,v,t);}

}

關於如何製作Rss的一種簡單方法

很多朋友問到很多網頁上面都有乙個的標誌,為什麼這樣呢?用來有什麼用呢?怎麼做呢?好,下面我們就簡單的分析一下!站點用來和其他站點之間共享內容的簡易方式 也叫聚合內容 rss使用xml作為彼此共享內容的標準方式。用處就不多說了,大家關心的還是怎麼做!首先資料庫設計,如圖 好,下面我們開始做頁面,我使用...

一種簡單方法實現頁面匯出 Excel 功能

try catch unsupportedencodingexception e inline or attachment default string mode request.getparameter mode re mendedname request.getparameter re mend...

mysql 效能統計的一種簡單方式

tps transactions per second 每秒傳輸的事物處理個數 這是指伺服器每秒處理的事務數,支援事務的儲存引擎如innodb等特有的乙個效能指標。計算方法 tps com commit com rollback uptime use information schema selec...