锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鎻忚堪錛?/strong>鍦ㄥ浜庝換閫変竴涓浘涓粨鐐逛負(fù)鏍圭殑DFS鎼滅儲(chǔ)鏍?wèi)涓缓绔嬩竴涓狶AB鏁扮粍涓嶭OW鏁扮粍錛孡AB鏁扮粍瀛樺偍涓粨鐐圭殑緙栧彿錛孡OW鏁扮粍瀛樺偍鍚勭偣鍙?qiáng)鍏跺瓙鏍?wèi)鐨勫悇緇撶偣鑳藉埌杈劇殑鏈灝忕紪鍙風(fēng)粨鐐圭殑緙栧彿銆?br>
2 DFS(u)
3 LAB[u] = LOW[u] = lab++
4 for each (u, v) in E(G)
5 if LAB[v] is 0
6 DFS(v)
7 LOW[u] = min{LOW[u], LOW[v]}
8 else if v isnot parent of u
9 LOW[u] = min{LOW[u], LAB[v]}
絎?琛屼腑錛屽鏋?u, v)鏄爲(wèi)杈癸紝鍒欏v鍋氭繁搴︿紭鍏堟悳绱紝騫朵笖LOW[u] = min{LOW[u], LOW[v]}錛屽鏋?u, v)鏄弽鍚戣竟錛屽垯LOW[u] = min{LOW[u], LAB[v]}銆?/span>
涓夈佸壊鐐?br> 鎻忚堪錛?/strong>褰撲竴涓粨鐐箄鏄壊鐐規(guī)椂蹇呮弧瓚充互涓嬩袱涓潯浠朵箣涓錛?br> 1錛塽涓烘牴涓旇嚦灝戞湁涓ゆ5瀛愭爲(wèi)錛?br> 2錛塽涓嶄負(fù)鏍逛笖瀛樺湪涓涓猽鍦ㄦ繁鎼滄爲(wèi)涓殑瀛愬コv浣垮緱LOW[v] ≥ LAB[u]銆?br> 紺轟緥錛?/strong>POJ 1523 瑙i鎶ュ憡銆?br>鍥涖佹ˉ
鎻忚堪錛?/strong>涓鏉¤竟e=(u, v)鏄ˉ錛屽綋涓斾粎褰揺涓烘爲(wèi)鏋濊竟涓擫OW[v] > LAB[u]銆?br> 紺轟緥錛?/strong>POJ 3352 瑙i鎶ュ憡銆?/span>
]]>
LCA錛歀east Common Ancestors錛堟渶榪戝叕鍏辯鍏堬級(jí)錛屽浜庝竴媯墊湁鏍規(guī)爲(wèi)T鐨勪換鎰忎袱涓妭鐐箄錛寁錛屾眰鍑篖CA(T, u, v)錛屽嵆紱昏窡鏈榪滅殑鑺傜偣x錛屼嬌寰梮鍚屾椂鏄痷鍜寁鐨勭鍏堛?br> 鍦ㄧ嚎綆楁硶錛氱敤姣旇緝闀跨殑鏃墮棿鍋氶澶勭悊錛屼絾鏄瓑淇℃伅鍏呰凍浠ュ悗姣忔鍥炵瓟璇㈤棶鍙渶瑕佺敤姣旇緝?yōu)畱鐨勬棄櫁淬?br> 紱葷嚎綆楁硶錛氬厛鎶婃墍鏈夌殑璇㈤棶璇誨叆錛岀劧鍚庝竴璧鋒妸鎵鏈夎闂洖絳斿畬鎴愩?br> RMQ錛氱粰鍑轟竴涓暟緇凙錛屽洖絳旇闂甊MQ(A, i, j)錛屽嵆A[i...j]涔嬮棿鐨勬渶鍊肩殑涓嬫爣銆?br>浜屻丏FS+RMQ
1錛塖parse Table錛圫T錛夌畻娉?br> 鎻忚堪錛?/strong>
鍒嗘瀽錛?/strong>鍒濆鍖栬繃紼嬪疄闄呬笂鏄竴涓姩鎬佽鍒掔殑鎬濇兂銆傛槗鐭ワ紝鍒濆鍖栬繃紼嬫晥鐜囨槸O(nlogn)錛岃屾煡璇㈣繃紼嬫晥鐜囨槸O(1)銆係T鏄竴涓湪綰跨畻娉曘?br> 紺轟緥錛?/strong>POJ 3368 瑙i鎶ュ憡
2錛夋眰瑙CA闂
鎻忚堪錛?/strong>
錛?錛塂FS錛氫粠鏍?wèi)T鐨勬牴寮濮嬶紝榪涜娣卞害浼樺厛閬嶅巻錛屽茍璁板綍涓嬫瘡嬈″埌杈劇殑欏剁偣銆傜涓涓殑緇撶偣鏄痳oot(T)錛屾瘡緇忚繃涓鏉¤竟閮借褰曞畠鐨勭鐐廣傜敱浜庢瘡鏉¤竟鎭板ソ緇忚繃2嬈★紝鍥犳涓鍏辮褰曚簡(jiǎn)2n-1涓粨鐐癸紝鐢‥[1, ... , 2n-1]鏉ヨ〃紺恒?br> 錛?錛夎綆桼錛氱敤R[i]琛ㄧずE鏁扮粍涓涓涓間負(fù)i鐨勫厓绱犱笅鏍囷紝鍗沖鏋淩[u] < R[v]鏃訛紝DFS璁塊棶鐨勯『搴忔槸E[R[u], R[u]+1, ..., R[v]]銆傝櫧鐒跺叾涓寘鍚玼鐨勫悗浠o紝浣嗘繁搴︽渶灝忕殑榪樻槸u涓巚鐨勫叕鍏辯鍏堛?br> 錛?錛塕MQ錛氬綋R[u] ≥ R[v]鏃訛紝LCA[T, u, v] = RMQ(L, R[v], R[u])錛涘惁鍒橪CA[T, u, v] = RMQ(L, R[u], R[v])錛岃綆桼MQ銆?br> 鐢變簬RMQ涓嬌鐢ㄧ殑ST綆楁硶鏄湪綰跨畻娉曪紝鎵浠ヨ繖涓畻娉曚篃鏄湪綰跨畻娉曘?br> 紺轟緥錛?/strong>ZOJ 3195 瑙i鎶ュ憡銆?br>涓夈乀arjan綆楁硶
鎻忚堪錛?/strong>Tarjan綆楁硶鏄竴涓綰跨畻娉曪紝涔熷氨鏄鍙湁鍏堣幏寰楁墍鏈夌殑鏌ヨ錛屽啀鎸変竴涓壒瀹氱殑欏哄簭榪涜榪愮畻銆?/p>
2 Tarjan(u)
3 visit[u] = true
4 for each (u, v) in QUERY
5 if visit[v]
6 ans(u, v) = FIND(v)
7 for each (u, v) in TREE
8 if !visit[v]
9 Tarjan(v)
10 parent[v] = u
]]>
鏈灝忚垂鐢ㄦ渶澶ф祦錛氳G鏄互s涓烘簮t涓烘眹鐨勭綉緇滐紝c鏄疓鐨勫閲忥紝b鏄疓鐨勫崟浣嶆祦閲忚垂鐢紝涓旀湁b[i][j] = -b[i][j]錛宖鏄疓鐨勬祦錛屽垯b(f)=鈭?fij*bij)錛?i, j)∈E(G) 涓攆ij>0銆傛渶灝忚垂鐢ㄦ渶澶ф祦闂錛屽氨鏄眰緗戠粶G鐨勬渶澶ф祦f涓斾嬌璐圭敤b(f)鏈灝忋傝繖鏍風(fēng)殑嫻佺О涓烘渶灝忚垂鐢ㄦ渶澶ф祦銆?/span>
浜屻佺畻娉曟濇兂
鐢‵ord-Fulkerson綆楁硶鐨勬濇兂錛屼笉鏂湴鍦ㄦ畫鐣欑綉緇滀腑瀵繪壘澧炲箍璺紝鍙笉榪囪繖涓騫胯礬鏄綋鍓嶇綉緇滀腑s鍒皌鐨勪互鍗曚綅嫻侀噺璐圭敤涓烘潈鐨勬渶鐭礬錛屽榪欐潯澧炲箍璺繘琛屾搷浣溿傜敱浜庤垂鐢ㄦ湁璐熷鹼紝寤鴻鐢⊿PFA綆楁硶銆?br>涓夈佺畻娉曚粙緇?br> 鎻忚堪錛?/span>
mcmf()

{
while(true)
{
for(int i=1; i<=n+m+1; i++)
d[i] = MAX;
d[s] = 0;
spfa(); //p涓瓨鏈夎鐐圭殑鍓嶇戶鐐?/span>
if(p[t] == -1) //琛ㄧず宸叉棤澧炲箍璺?/span>
break;
int minf = INT_MAX;
int it = t;
while(p[it] != -1)
{
minf = min(minf, c[p[it]][it] - f[p[it]][it]);
it = p[it];
}
it = t;
while(p[it] != -1)
{
f[p[it]][it] += minf;
f[it][p[it]] = -f[p[it]][it];
it = p[it];
}
}
} 璇存槑錛?/strong>絎?琛岀殑DFS(u)榪囩▼錛屽綋瀛樺湪浠巙寮濮嬬殑M鍙騫胯礬錛屽垯榪斿洖true錛屽茍瀹屾垚M鐨勬墿灞曪紝姝ゆ椂|M|鍔犱竴銆傚鏋滆繑鍥瀎alse錛屽垯琛ㄧず涓嶅瓨鍦∕鍙騫胯礬銆?nbsp;
紺轟緥錛?/strong>POJ 1274 瑙i鎶ュ憡銆?/span>
涓夈佹渶浼樺尮閰嶏紙KM綆楁硶錛?br> 鎻忚堪錛?/strong>
錛?錛変粠浠繪剰鍙欏舵爣l寮濮嬶紝紜畾l絳夊瓙鍥綠l錛屽茍涓斿湪Gl涓夊彇鍖歸厤M銆傝嫢M楗卞拰V1錛屽垯M鏄畬緹庡尮閰嶏紝涔熷嵆M鏄渶浼樺尮閰嶏紝綆楁硶緇堟錛?br> 錛?錛夊惁鍒欙紝榪愮敤鍖堢墮鍒╃畻娉曪紝緇堟浜嶴灞炰簬V1錛孴灞炰簬V2涓斾嬌瀵逛簬Gl錛孨(S)=T銆備護(hù)al=min{l(x)+l(y)-w(x, y) | x∈S, y∈V2-T}錛屼護(hù)l'(u)=l(u)-al濡傛灉u∈S錛沴'(u)=l(u)+al濡傛灉u∈T錛沴'(u)=l(u)錛屽叾瀹冦傜敤l'浠f浛l錛岀敤Gl'浠f浛Gl杞叆錛?錛夈?br> 瀹炵幇錛?/strong>
嫻佺綉緇滐細(xì)G=(V, E)鏄竴涓湁鍚戝浘錛屽叾涓瘡鏉¤竟(u, v)∈E鍧囨湁涓涓潪璐熷閲?span lang="EN-US">c(u, v) ≤0錛屽惁鍒?span lang="EN-US">c(u, v)涓?span lang="EN-US">0.嫻佺綉緇滀腑鏈変袱涓壒鍒殑欏剁偣錛氭簮鐐?span lang="EN-US">s鍜屾眹鐐?span lang="EN-US">t銆傚浜庢瘡涓《鐐?span lang="EN-US">v∈V錛岄兘瀛樺湪涓鏉¤礬寰?span lang="EN-US">s…v…t銆?span lang="EN-US">
嫻侊細(xì)G涓婄殑涓涓疄鍊煎嚱鏁?span lang="EN-US">(V×V→R)錛屾弧瓚?span lang="EN-US">1)瀵逛簬浠繪剰u, v∈V錛?span lang="EN-US">f(u, v)≤c(u, v)錛?span lang="EN-US">2)瀵逛簬浠繪剰u, v∈V錛?span lang="EN-US">f(u, v)=-f(u, v)錛?span lang="EN-US">3)瀵逛簬浠繪剰u∈V-{s, t}錛屸垜f(u, i)=0銆傚畾涔夋祦|f|=鈭?span lang="EN-US">f(s, i)銆?span lang="EN-US">
孌嬬暀緗戠粶錛氱粰瀹氭祦緗戠粶鍜屼竴涓祦錛屽叾孌嬬暀緗戠粶鐢卞彲浠ュ綰蟲洿澶氱綉緇滄祦鐨勮竟緇勬垚銆傚畾涔夋畫鐣欏閲?span style="color: red;" lang="EN-US">cf(u, v)=c(u, v)-f(u, v)銆傛畫鐣欑綉緇?span lang="EN-US">Gf=(V,Ef),鍏朵腑Ef={(u, v)∈V×V:cf(u, v)>0}銆?span lang="EN-US">
澧炲箍璺緞錛氬鍏夎礬寰?span lang="EN-US">p涓烘畫鐣欑綉緇?span lang="EN-US">Gf涓粠s鍒?span lang="EN-US">t鐨勪竴鏉$畝鍗曡礬寰勩?span lang="EN-US">
嫻佺綉緇滅殑鍓詫細(xì)嫻佺綉緇滅殑鍓?span lang="EN-US">(S, T)灝?span lang="EN-US">V鍒掑垎涓?span lang="EN-US">S鍜?span lang="EN-US">T=V-S涓ら儴鍒嗭紝浣垮緱s∈S錛?span lang="EN-US">t∈T銆傜┛榪囧壊鐨勫噣嫻佸畾涔変負(fù)f(S, T)錛屼笖鏈?span lang="EN-US">f(S, T)=|f|銆傚壊鐨勫閲忎負(fù)c(u, v)銆備竴涓綉緇滅殑鏈灝忓壊灝辨槸緗戠粶涓墍鏈夊壊涓祦閲忔渶灝忕殑鍓層?span lang="EN-US">
鏈澶ф祦鏈灝忓壊瀹氱悊錛氫互涓嬩笁涓潯浠剁瓑浠鳳細(xì)1)f鏄?span lang="EN-US">G鐨勪竴涓渶澶ф祦錛?span lang="EN-US">2)孌嬬暀緗戠粶Gf涓嶅寘鍚騫胯礬寰勶紱3)瀵?span lang="EN-US">G鐨勬煇涓壊(S, T)錛屾湁|f|=c(S, T)銆?span lang="EN-US">
鍓嶇疆嫻侊細(xì)鏄竴涓嚱鏁?span lang="EN-US">f錛?span lang="EN-US">V×V→R錛屽畠婊¤凍1)瀵逛簬浠繪剰u, v∈V錛?span lang="EN-US">f(u, v)≤c(u, v)錛?span lang="EN-US">2)瀵逛簬浠繪剰u, v∈V錛?span lang="EN-US">f(u, v)=-f(u, v)錛?span lang="EN-US">3)瀵逛簬浠繪剰u∈V-{s, t}錛?span lang="EN-US">f[V, u]≥0銆傚畾涔変綑嫻?span lang="EN-US">e[u]=f[V, u]錛屽浜?span lang="EN-US">u∈V-{s, t}錛屽綋e[u]>0鏃訛紝縐伴《鐐?span lang="EN-US">u婧㈠嚭銆?span lang="EN-US">
楂樺害鍑芥暟錛氬嚱鏁?span lang="EN-US">h錛?span lang="EN-US">V→N婊¤凍h[s]=|V|錛?span lang="EN-US">h[t]=0錛屼笖瀵規(guī)瘡鏉℃畫鐣欒竟(u, v)∈Ef錛屾湁h[u]≤h[v]+1銆?span lang="EN-US">
瀹硅杈癸細(xì)濡傛灉cf(u, v)>0涓?span lang="EN-US">h[u]=h[v]+1錛屽垯縐?span lang="EN-US">(u, v)鏄璁歌竟銆傚惁鍒欙紝(u, v)鏄潪瀹硅杈廣傚璁哥綉緇滀負(fù)Gf,h=(V, Ef,h)錛屽叾涓?span lang="EN-US">Ef,h涓哄璁歌竟鐨勯泦鍚堛傛牴鎹璁歌竟鏈夊叧楂樺害鐨勫畾涔夛紝鏄撶煡錛屽璁哥綉緇滀笉瀛樺湪鍥炶礬銆?br>
浜屻?nbsp; Ford-Fulkerson鏂規(guī)硶
1錛?nbsp;鍩烘湰鐨凢ord-Fulkerson綆楁硶
鎻忚堪錛?/strong>
鍒嗘瀽錛?/strong>Ford-Fulkerson榪囩▼鐨勬晥鐜囧彇鍐充簬濡備綍紜畾澧炲箍璺緞銆傚鏋滈夋嫨涓嶅ソ錛屽浜庨潪鏈夌悊鐨勫閲忥紝綆楁硶鏈夊彲鑳戒笉鑳界粓姝€傚鏋滃閲忔槸鏁存暟錛堝鏋滃閲忎笉鏄暣鏁幫紝鍙互涔樹互鐗瑰畾鐨勫洜瀛愯漿鍖栦負(fù)鏁存暟錛夈傝繖鏃訛紝絎?~4琛岃繍琛屾椂闂翠負(fù)O(E),絎?~9琛岋紝while寰幆鑷沖鎵ц|f*|錛岃繖鏄洜涓哄湪姣忔榪唬鍚庯紝嫻佸艱嚦灝戝鍔?銆傛晠綆楁硶鏁堢巼涓篛(E|f*|)銆傚綋鏈澶ф祦f*杈冨皬鏃訛紝榪欎釜綆楁硶鐨勬晥鐜囪繕鏄笉閿欑殑銆?/span>
2錛塃dmonds-Karp綆楁硶
鎻忚堪錛?/strong>灝嗗熀鏈殑Ford-Fulkerson綆楁硶鐨勭5琛屼腑鐢ㄥ箍搴︿紭鍏堟悳绱㈡潵瀹炵幇澧炲箍璺痯鐨勮綆楋紝鍗沖騫胯礬寰勬槸孌嬬暀緗戠粶涓粠s鍒皌鐨勬渶鐭礬寰?鍏朵腑姣忔潯杈逛負(fù)鍗曚綅璺濈鎴栨潈)錛屽垯鑳藉鏀硅繘Ford-Fulkerson綆楁硶鐨勭晫銆?br> 鍒嗘瀽錛?/strong>闅忕潃綆楁硶鐨勮繍琛岋紝瀵逛簬鎵鏈夐《鐐箆∈V-{s, t}錛屾畫鐣欑綉緇淕f涓殑鏈鐭礬寰勯暱搴?#948;f(s, v)闅忕潃姣忎釜嫻佺殑澧炲姞鑰屽崟璋冮掑銆傜洿瑙傜湅鏉ワ紝姣忔澧炲姞嫻佺殑鎿嶄綔閮藉皢浣垮緱褰撳墠鏈鐭礬涓殑涓鏉¤竟(鍗沖叧閿竟錛宑f(a, b)=cf(p))浠巔涓秷澶憋紝浠庤屼嬌寰楁柊鐢熸垚鐨凣f涓殑鏈鐭礬寰勭殑闀垮害澧炲姞銆傚悓鏃訛紝浠繪剰杈?u, v)鑷沖鑳芥垚涓簗V|/2-1嬈℃垚涓哄叧閿竟銆傝繖鏄洜涓虹i嬈℃垚涓哄叧閿竟鏃舵湁δf(s, v)=δf(s, u)+1錛岃岀i+1嬈℃椂f[u, v]鍙彲鑳戒笌涓婃寮傚彿錛屽垯鏈?#948;f'(s, u)=δf'(s, v)+1錛屼笖鏈?#948;f'(s, v)≥δf(s, v)錛屽垯δf'(s, u)=δf'(s, v)+1)≥δf(s, v)+1=δf(s, u)+2銆傛晠(u, v)姣忔鎴愪負(fù)鍏抽敭杈歸兘灝嗕嬌寰?#948;f(s, u)澧炲姞2錛屾湁鐢變簬δf(s, u)鏈澶у間負(fù)|V|-2錛屽垯浠繪剰杈?u, v)鑷沖鑳芥垚涓簗V|/2-1嬈℃垚涓哄叧閿竟銆傛晠璇ョ畻娉曠殑鏃墮棿澶嶆潅鎬т負(fù)O(VE2)銆?br> 紺轟緥錛?/strong>POJ 1273 瑙i鎶ュ憡
涓夈?nbsp; Push-Relabel綆楁硶
鎻忚堪錛?/strong>
姝g‘鎬э細(xì)鐢ㄥ驚鐜笉鍙樺紡鏉ヨ鏄?br> 1錛夊垵濮嬪寲錛欼NITILIZATION-FREFLOW鍒濆鍖杅涓哄墠緗祦
2錛変繚鎸侊細(xì)綆楁硶涓彧浣跨敤浜?jiǎn)push涓巖elabel鎿嶄綔錛宺elabel鎿嶄綔鍙獎(jiǎng)鍝嶉珮搴︼紝涓嶅獎(jiǎng)鍝峟錛涜宲ush(u, v)鎿嶄綔錛屽彧浼?xì)澧炲姞鐐箆鐨勬祦鍏ラ噺鍗砯(V, v)錛?br>鎵浠ュ鏋滄搷浣滀互鍓嶆槸鍓嶇疆嫻侊紝鎿嶄綔鍚庤繕鏄墠緗祦
3錛夌粓姝細(xì)鍦ㄧ粓姝㈡椂錛孷-{s, t}涓殑姣忎釜欏剁偣鐨勪綑嫻佸繀涓?錛堝鏋滃瓨鍦ㄤ笉涓?鐨勭偣錛屽垯蹇呭彲浠ヨ繘琛宲ush鎴杛elabel鎿嶄綔錛夛紝涓旀渶緇堝緱鍒扮殑鏄竴涓墠緗祦錛屾晠鏈緇堝緱鍒扮殑鏄竴涓祦銆傚張鍦ㄦ渶緇堢殑孌嬬暀緗戠粶涓紝涓嶅瓨鍦╯鍒皌鐨勮礬寰勶紙鍚﹀垯錛屽瀛樺湪涓鏉¤礬寰剆,v1,...,t錛屽垯s鍙互鍚戝帇鍏ユ祦錛屼嬌寰梫1婧㈠嚭錛夛紝鏍規(guī)嵁鏈澶ф祦鏈灝忓壊瀹氱悊錛宖鏄渶澶ф祦銆?br> 鍒嗘瀽錛?/strong>棣栧厛錛岃瘉鏄庡浜庝換鎰忔孩鍑虹偣u錛屽潎瀛樺湪涓鏉″湪Gf涓婄殑u鍒皊鐨勮礬錛岃U={v|鍦℅f瀛樺湪涓鏉鍒皏鐨勮礬寰剗錛岃U#=V-U錛屽亣璁緎涓嶅睘浜嶶錛屽浜庨《鐐瑰(v, w)錛寁灞炰簬U錛寃灞炰簬U#錛屾湁f(v, w)≤0錛屽惁鍒欙紝濡傛灉f(v, w)>0錛屽垯鏈塩f(v, w)=c(v, w)-f(v, w)=c(v, w)+f(w, v)>0錛岃繖涓巜涓嶅睘浜嶶鐭涚浘錛乪[u] =f(V, U)=F(U, U)+f(U#, U)=F(U#, U)≤0錛岃屽浜巚∈V-{s}錛宔[v]≥0錛屽張e[u]>0錛屽垯U涓繀鏈塻錛岀煕鐩撅紒
relabel鎿嶄綔錛氬浜庢簮鐐逛笌浼?xì)鐐瑰Q屼笉瀛樺湪relabel鎿嶄綔錛岃屽浜庡叾瀹冮《鐐箄錛屽垵濮嬫椂錛宧[u]=0≤2|V|-1錛屽綋u榪涜relabel鏃訛紝u婧㈠嚭錛屽垯Gf涓繀瀛樺湪涓鏉鍒皊鐨勮礬寰刾=<u=v0,v1,...,vk=s>錛岀敱楂樺害鍑芥暟鐨勫畾涔?u, v)∈Ef錛屾湁h[u]≤h[v]+1錛屽垯h[u]=h[v0]≤h[vk]+k≤h[s]+|V|-1=2|V|-1錛岀畻娉曚腑鎬誨叡鐨剅elabel鎿嶄綔嬈℃暟涓篛(V2)銆?br> 楗卞拰push鎿嶄綔錛氳繘琛屾搷浣滃悗錛?u, v)杈逛粠Ef涓秷澶憋紝鍒欑О璇ush鎿嶄綔涓洪ケ鍜宲ush鎿嶄綔錛岃繘琛屼竴嬈?u, v)鐨勯ケ鍜宲ush鎿嶄綔蹇呮湁h[u]=h[v]+1錛屽悓鏃訛紝瑕佽繘琛屼笅涓嬈?u, v)鐨勯ケ鍜宲ush鎿嶄綔錛屽繀鍏堢粡榪囦竴嬈?v, u)鐨勯ケ鍜宲ush鎿嶄綔錛屽垯涓ゆ楗卞拰鎿嶄綔瀹[u]澧炲姞2錛屽張h[u]≤2|V|-1錛屽垯姣忎釜欏剁偣鑷沖榪涜|V|嬈¢ケ鍜宲ush鎿嶄綔錛屽垯鎬誨叡鐨勯ケ鍜宲ush鎿嶄綔嬈℃暟涓篛(|V||E|)銆?br> 涓嶉ケ鍜宲ush鎿嶄綔錛歱ush鎿嶄綔涓櫎鍘婚ケ鍜宲ush鎿嶄綔錛屽墿涓嬬殑灝辨槸涓嶉ケ鍜宲ush鎿嶄綔銆傚畾涔変竴涓嚱鏁癵錛屽間負(fù)鎵鏈塭鍊煎ぇ浜?鐨勯《鐐圭殑楂樺害鍜岋紝鏁単≥0銆傝冨療涓夌鎿嶄綔瀵筭鍊肩殑褰卞搷錛?錛塺elabel鎿嶄綔涓嶄細(xì)鏀瑰彉婧㈠嚭鎬т笖鍙細(xì)鏀瑰彉涓涓偣錛岃屼竴涓偣鐨勫彉鍖栬嚦澶氫負(fù)2|V|-1錛屽垯g鑷沖澧炲姞2|V|-1錛?錛夐ケ鍜宲ush鎿嶄綔鍙兘鑳藉鍔犱竴涓孩鍑虹偣錛実鑷沖澧炲姞2|V|-1錛?錛変笉楗卞拰push(u, v)鎿嶄綔浼?xì)鋴蓇鍙樹負(fù)涓嶆孩鍑猴紝鑰屽湪v浠庝笉婧㈠嚭鍒版孩鍑烘椂錛屽噺灝忕殑鏈灝戯紝涓?錛堝洜涓篽[u]=h[v]+1)銆傚垯涓嶉ケ鍜宲ush鎿嶄綔鐨勬鏁拌嚦澶氫負(fù)O(|V|2|E|+|V|3)銆?br> 緇間笂錛孭ush-Relabel綆楁硶鏄紜殑涓旀晥鐜囦負(fù)O(V2E)銆?br> 紺轟緥錛?/strong>POJ 1459 瑙i鎶ュ憡
涓銆?鍗曚釜鐐瑰埌鍥句腑鍚勪釜鐐圭殑璺濈
浜屻?鍥句腑浠繪剰涓や釜鐐逛箣闂寸殑璺濈
Bellman-Ford綆楁硶涓庡彟涓涓潪甯歌憲鍚嶇殑Dijkstra綆楁硶涓鏍鳳紝鐢ㄤ簬姹傝В鍗曟簮鐐規(guī)渶鐭礬寰勯棶棰樸?/span>Bellman-ford綆楁硶闄や簡(jiǎn)鍙眰瑙h竟鏉冨潎闈炶礋鐨勯棶棰樺錛岃繕鍙互瑙e喅瀛樺湪璐熸潈杈圭殑闂錛堟剰涔夋槸浠涔堬紝濂藉ソ鎬濊冿級(jí)錛岃?/span>Dijkstra綆楁硶鍙兘澶勭悊杈規(guī)潈闈炶礋鐨勯棶棰橈紝鍥犳 Bellman-Ford綆楁硶鐨勯傜敤闈㈣騫挎硾涓浜涖備絾鏄紝鍘熷鐨?/span>Bellman-Ford綆楁硶鏃墮棿澶嶆潅搴︿負(fù) O錛?/span>VE錛?/span>,姣?/span>Dijkstra綆楁硶鐨勬椂闂村鏉傚害楂橈紝鎵浠ュ父甯歌浼楀鐨勫ぇ瀛︾畻娉曟暀縐戜功鎵蹇界暐錛屽氨榪炵粡鍏哥殑銆婄畻娉曞璁恒嬩篃鍙粙緇嶄簡(jiǎn)鍩烘湰鐨?/span>Bellman-Ford綆楁硶錛屽湪鍥藉唴甯歌鐨勫熀鏈俊鎭濂ヨ禌鏁欐潗涓篃鍧囨湭鎻愬強(qiáng)錛屽洜姝よ綆楁硶鐨勭煡鍚嶅害涓庤鎺屾彙搴﹂兘涓嶅Dijkstra綆楁硶銆備簨瀹炰笂錛屾湁澶氱褰㈠紡鐨?/span>Bellman-Ford綆楁硶鐨勪紭鍖栧疄鐜般傝繖浜涗紭鍖栧疄鐜板湪鏃墮棿鏁堢巼涓婂緱鍒扮浉褰撴彁鍗囷紝渚嬪榪戜竴涓ゅ勾琚儹鎹х殑SPFA錛?/span>Shortest-Path Faster Algoithm 鏇村揩鐨勬渶鐭礬寰勭畻娉曪級(jí)綆楁硶鐨勬椂闂存晥鐜囩敋鑷崇敱浜?/span>Dijkstra綆楁硶錛屽洜姝ゆ垚涓轟俊鎭濂ヨ禌閫夋墜緇忓父璁ㄨ鐨勮瘽棰樸傜劧鑰岋紝闄愪簬璧勬枡鍖箯錛屾湁鍏?/span>Bellman-Ford綆楁硶鐨勮澶氶棶棰樺父甯稿洶鎵板ゥ璧涢夋墜銆傚錛氳綆楁硶鍊煎緱鎺屾彙涔堬紵鎬庢牱鐢ㄧ紪紼嬭璦鍏蜂綋瀹炵幇錛熸湁鍝簺浼樺寲錛熶笌SPFA綆楁硶鏈夊叧緋諱箞錛熸湰鏂囪瘯鍥懼Bellman-Ford綆楁硶鍋氫竴涓瘮杈冨叏闈㈢殑浠嬬粛銆傜粰鍑哄嚑縐嶅疄鐜扮▼搴忥紝浠庣悊璁哄拰瀹炴祴涓ゆ柟闈㈠垎鏋愪粬浠殑鏃墮棿澶嶆潅搴︼紝渚涘ぇ瀹跺湪澶囨垬鐪侀夊拰鍚庣畫鐨?/span>noi鏃跺弬鑰冦?/span>
Bellman-Ford綆楁硶鑳藉湪鏇存櫘閬嶇殑鎯呭喌涓嬶紙瀛樺湪璐熸潈杈癸級(jí)瑙e喅鍗曟簮鐐規(guī)渶鐭礬寰勯棶棰樸傚浜庣粰瀹氱殑甯︽潈錛堟湁鍚戞垨鏃犲悜錛夊浘 G=錛?/span>V,E錛夛紝鍏舵簮鐐逛負(fù)s錛屽姞鏉冨嚱鏁?/span> w鏄?/span> 杈歸泦 E 鐨勬槧灝勩傚鍥?/span>G榪愯Bellman-Ford綆楁硶鐨勭粨鏋滄槸涓涓竷?yōu)當(dāng)鍊鹼紝琛ㄦ槑鍥句腑鏄惁瀛樺湪鐫涓涓粠婧愮偣s鍙揪鐨勮礋鏉冨洖璺?/span>鑻ヤ笉瀛樺湪榪欐牱鐨勫洖璺紝綆楁硶灝嗙粰鍑轟粠婧愮偣s鍒?/span> 鍥?/span>G鐨勪換鎰忛《鐐?/span>v鐨勬渶鐭礬寰?/span>d[v]銆?/span>
錛?錛?span style="FONT: 7pt Times New Roman; font-size-adjust: none; font-stretch: normal"> 鍒濆鍖栵細(xì)灝嗛櫎婧愮偣澶栫殑鎵鏈夐《鐐圭殑鏈鐭窛紱諱及璁″?/span> d[v] ←+∞, d[s] ←0;
錛?錛?span style="FONT: 7pt Times New Roman; font-size-adjust: none; font-stretch: normal"> 榪唬姹傝В錛氬弽澶嶅杈歸泦E涓殑姣忔潯杈硅繘琛屾澗寮涙搷浣滐紝浣垮緱欏剁偣闆哣涓殑姣忎釜欏剁偣v鐨勬渶鐭窛紱諱及璁″奸愭閫艱繎鍏舵渶鐭窛紱伙紱錛堣繍琛寍v|-1嬈★級(jí)
錛?錛?span style="FONT: 7pt Times New Roman; font-size-adjust: none; font-stretch: normal"> 媯(gè)楠岃礋鏉冨洖璺細(xì)鍒ゆ柇杈歸泦E涓殑姣忎竴鏉¤竟鐨勪袱涓鐐規(guī)槸鍚︽敹鏁涖傚鏋滃瓨鍦ㄦ湭鏀舵暃鐨勯《鐐癸紝鍒欑畻娉曡繑鍥?/span>false錛岃〃鏄庨棶棰樻棤瑙o紱鍚﹀垯綆楁硶榪斿洖true錛屽茍涓斾粠婧愮偣鍙揪鐨勯《鐐?/span>v鐨勬渶鐭窛紱諱繚瀛樺湪 d[v]涓?/span>
綆楁硶鎻忚堪濡備笅錛?/span>
Bellman-Ford(G,w,s) 錛?/span>boolean //鍥?/span>G 錛岃竟闆?/span> 鍑芥暟 w 錛?/span>s涓烘簮鐐?/span>
1 for each vertex v ∈ V錛圙錛?do //鍒濆鍖?span> 1闃舵
2 d[v] ←+∞
3 d[s] ←0; //1闃舵緇撴潫
4 for i=1 to |v|-1 do //2闃舵寮濮嬶紝鍙岄噸寰幆銆?/span>
5 for each edge錛坲,v錛?∈E(G) do //杈歸泦鏁扮粍瑕佺敤鍒幫紝絀蜂婦姣忔潯杈廣?/span>
6 If d[v]> d[u]+ w(u,v) then //鏉懼紱鍒ゆ柇
7 d[v]=d[u]+w(u,v) //鏉懼紱鎿嶄綔 2闃舵緇撴潫
8 for each edge錛坲,v錛?∈E(G) do
9 If d[v]> d[u]+ w(u,v) then
10 Exit false
11 Exit true
涓嬮潰緇欏嚭鎻忚堪鎬ц瘉鏄庯細(xì)
棣栧厛鎸囧嚭錛屽浘鐨勪換鎰忎竴鏉℃渶鐭礬寰勬棦涓嶈兘鍖呭惈璐熸潈鍥炶礬錛屼篃涓嶄細(xì)鍖呭惈姝f潈鍥炶礬錛屽洜姝ゅ畠鏈澶氬寘鍚?/span>|v|-1鏉¤竟銆?/span>
鍏舵錛屼粠婧愮偣s鍙揪鐨勬墍鏈夐《鐐瑰鏋?/span> 瀛樺湪鏈鐭礬寰勶紝鍒欒繖浜涙渶鐭礬寰勬瀯鎴愪竴涓互s涓烘牴鐨勬渶鐭礬寰勬爲(wèi)銆?/span>Bellman-Ford綆楁硶鐨勮凱浠f澗寮涙搷浣滐紝瀹為檯涓婂氨鏄寜欏剁偣璺濈s鐨勫眰嬈★紝閫愬眰鐢熸垚榪欐5鏈鐭礬寰勬爲(wèi)鐨勮繃紼嬨?/span>
鍦ㄥ姣忔潯杈硅繘琛?span>1 閬嶆澗寮涚殑鏃跺欙紝鐢熸垚浜?jiǎn)浠巗鍑哄彂錛屽眰嬈¤嚦澶氫負(fù)1鐨勯偅浜涙爲(wèi)鏋濄備篃灝辨槸璇達(dá)紝鎵懼埌浜?jiǎn)涓巗鑷沖鏈?鏉¤竟鐩歌仈鐨勯偅浜涢《鐐圭殑鏈鐭礬寰勶紱瀵規(guī)瘡鏉¤竟榪涜絎?閬嶆澗寮涚殑鏃跺欙紝鐢熸垚浜?jiǎn)绗?灞傛鐨勬爲(wèi)鏋濓紝灝辨槸璇存壘鍒頒簡(jiǎn)緇忚繃2鏉¤竟鐩歌繛鐨勯偅浜涢《鐐圭殑鏈鐭礬寰?#8230;…銆傚洜涓烘渶鐭礬寰勬渶澶氬彧鍖呭惈|v|-1 鏉¤竟錛屾墍浠ワ紝鍙渶瑕佸驚鐜瘄v|-1 嬈°?/span>
姣忓疄鏂戒竴嬈℃澗寮涙搷浣滐紝鏈鐭礬寰勬爲(wèi)涓婂氨浼?xì)鏈変竴灞傞《鐐硅揪鍒板叾鏈鐭窛紱伙紝姝ゅ悗榪欏眰欏剁偣鐨勬渶鐭窛紱誨煎氨浼?xì)涓鐩翠繚鎸佷笉鍙橈紝涓嶅啀鍙楀悗緇澗寮涙搷浣滅殑褰卞搷銆傦紙浣嗘槸錛屾瘡嬈¤繕瑕佸垽鏂澗寮涳紝榪欓噷嫻垂浜?jiǎn)澶ч噺鐨勬棄櫁村Q屾庝箞浼樺寲錛熷崟綰殑浼樺寲鏄惁鍙錛燂級(jí)
濡傛灉娌℃湁璐熸潈鍥炶礬錛岀敱浜庢渶鐭礬寰勬爲(wèi)鐨勯珮搴︽渶澶氬彧鑳芥槸|v|-1錛屾墍浠ユ渶澶氱粡榪噟v|-1閬嶆澗寮涙搷浣滃悗錛屾墍鏈変粠s鍙揪鐨勯《鐐瑰繀灝嗘眰鍑烘渶鐭窛紱匯傚鏋?d[v]浠嶄繚鎸?+∞錛屽垯琛ㄦ槑浠巗鍒皏涓嶅彲杈俱?/span>
濡傛灉鏈夎礋鏉冨洖璺紝閭d箞絎?span> |v|-1 閬嶆澗寮涙搷浣滀粛鐒朵細(xì)鎴愬姛錛岃繖鏃訛紝璐熸潈鍥炶礬涓婄殑欏剁偣涓嶄細(xì)鏀舵暃銆?/span>
渚嬪瀵逛簬涓婂浘錛岃竟涓婃柟妗嗕腑鐨勬暟瀛椾唬琛ㄦ潈鍊鹼紝欏剁偣A,B,C涔嬮棿瀛樺湪璐熸潈鍥炶礬銆係鏄簮鐐癸紝欏剁偣涓暟瀛楄〃紺鴻繍琛孊ellman-Ford綆楁硶鍚庡悇鐐圭殑鏈鐭窛紱諱及璁″箋?/span>
姝ゆ椂d[a] 鐨勫間負(fù)1錛屽ぇ浜巇[c]+w(c,a)鐨勫?2錛岀敱姝[a]鍙互鏉懼紱涓?2錛岀劧鍚巇[b]鍙堝彲浠ユ澗寮涗負(fù)-5,d[c]鍙堝彲浠ユ澗寮涗負(fù)-7.涓嬩竴涓懆鏈燂紝d[a]鍙堝彲浠ユ洿鏂頒負(fù)鏇村皬鐨勫鹼紝榪欎釜榪囩▼姘歌繙涓嶄細(xì)緇堟銆傚洜姝わ紝鍦ㄨ凱浠f眰瑙f渶鐭礬寰勯樁孌電粨鏉熷悗錛屽彲浠ラ氳繃媯(gè)楠岃竟闆咵鐨勬瘡鏉¤竟(u,v)鏄惁婊¤凍鍏崇郴寮?span> d[v]> d[u]+ w(u,v) 鏉ュ垽鏂槸鍚﹀瓨鍦ㄨ礋鏉冨洖璺?/span>
瑙?/span> bellmanford.pas 鏂囦歡
鍒嗘瀽 Bellman-Ford綆楁硶錛屼笉闅劇湅鍑猴紝澶栧眰寰幆錛堣凱浠f鏁幫級(jí)|v|-1瀹為檯涓婂彇寰楁槸涓婇檺銆傜敱涓婇潰瀵圭畻娉曟紜х殑璇佹槑鍙煡錛岄渶瑕佺殑榪唬閬嶆暟絳変簬鏈鐭礬寰勬爲(wèi)鐨勯珮搴︺傚鏋滀笉瀛樺湪璐熸潈鍥炶礬錛屽鉤鍧囨儏鍐典笅鐨勬渶鐭礬寰勬爲(wèi)鐨勯珮搴﹀簲璇ヨ繙榪滃皬浜?/span> |v|-1錛屽湪姝ゆ儏鍐典笅錛屽浣欐渶鐭礬寰勬爲(wèi)楂樼殑榪唬閬嶆暟灝辨槸鏃墮棿涓婄殑嫻垂錛岀敱姝わ紝鍙互渚濇鏉ュ疄鏂戒紭鍖栥?/span>
浠庣粏鑺備笂鍒嗘瀽錛屽鏋滃湪鏌愪竴閬嶈凱浠d腑錛岀畻娉曟弿榪頒腑絎?/span>7琛岀殑鏉懼紱鎿嶄綔鏈墽琛岋紝璇存槑璇ラ亶榪唬鎵鏈夌殑杈歸兘娌℃湁琚澗寮涖傚彲浠ヨ瘉鏄庯紙鎬庝箞璇佹槑錛燂級(jí)錛氳嚦姝ゅ悗錛岃竟闆嗕腑鎵鏈夌殑杈歸兘涓嶉渶瑕佸啀琚澗寮涳紝浠庤屽彲浠ユ彁鍓嶇粨鏉熻凱浠h繃紼嬨傝繖鏍鳳紝浼樺寲鐨勬帾鏂藉氨闈炲父綆鍗曚簡(jiǎn)銆?/span>
璁懼畾涓涓竷?yōu)當(dāng)鍨嬫爣蹇楀彉閲?/span> relaxed錛屽垵鍊間負(fù)false銆傚湪鍐呭眰寰幆涓紝浠呭綋鏈夎竟琚垚鍔熸澗寮涙椂錛屽皢 relaxed 璁劇疆涓?/span>true銆傚鏋滄病鏈夎竟琚澗寮涳紝鍒欐彁鍓嶇粨鏉熷灞傚驚鐜傝繖涓鏀硅繘鍙互鏋佸ぇ鐨勫噺灝戝灞傚驚鐜殑榪唬嬈℃暟銆備紭鍖栧悗鐨?/span> bellman-ford鍑芥暟濡備笅銆?/span>
function bellmanford(s:longint):boolean;
begin
for i:=1 to nv do
d[i]:=max;
d[s]:=0;
for i:=1 to nv-1 do
begin
relaxed:=false;
for j:=1 TO ne do
if(d[edges[j].s]<>max) and (d[edges[j].e]>d[edges[j].s]+edges[j].w)
then begin
d[edges[j].e]:=d[edges[j].s]+edges[j].w ;
relaxed:=true;
end;
if not relaxed then break;
end;
for i:=1 to ne do
if d[edges[j].e]>d[edges[j].s]+edges[j].w then exit(false);
exit(true);
end;
榪欐牱鐪嬩技騫沖嚒鐨勪紭鍖栵紝浼?xì)鏈夋庢牱鐨勬晥鏋滃憿錛熸湁鐮旂┒琛ㄦ槑錛屽浜庨殢鏈虹敓鎴愭暟鎹殑騫沖潎鎯呭喌錛屾椂闂村鏉傚害鐨勪及綆楀叕寮忎負(fù)
1.13|E| if |E|<|V|
0.95*|E|*lg|V| if |E|>|V|
浼樺寲鍚庣殑綆楁硶鍦ㄥ鐞嗘湁璐熸潈鍥炶礬鐨勬祴璇曟暟鎹椂錛岀敱浜庢瘡嬈¢兘浼?xì)鏈夎竟琚潙旨涘Q屾墍浠?/span>relaxed姣忔閮戒細(xì)琚疆涓?/span>true錛屽洜鑰屼笉鍙兘鎻愬墠緇堟澶栧眰寰幆銆傝繖瀵瑰簲浜?jiǎn)鏈鍧忔儏鍐碉紝鍏舵椂闂村鏉傚害浠嶆棫涓?/span>O(VE)銆?/span>
浼樺寲鍚庣殑綆楁硶鐨勬椂闂村鏉傚害宸茬粡鍜岀敤浜屽弶鍫嗕紭鍖栫殑Dijkstra綆楁硶鐩歌繎浜?jiǎn)锛岃岀紪鐮佺殑澶嶆潅紼嬪害榪滄瘮鍚庤呬綆銆傚姞涔?/span>Bellman-Ford綆楁硶鑳藉鐞嗗悇縐嶈竟鍊兼潈鎯呭喌涓嬬殑鏈鐭礬寰勯棶棰橈紝鍥犺岃繕鏄潪甯鎬紭縐鐨勩?/span>Usaco3.2.6 鐨勭▼搴忚bellmanford_1.pas
鍥涖?/span>SPFA 綆楁硶
SPFA鏄洰鍓嶇浉褰撲紭縐鐨勬眰鏈鐭礬寰勭殑綆楁硶錛屽煎緱鎴戜滑鎺屾彙銆?/span>
SPFA瀵?/span>Bellman-Ford綆楁硶浼樺寲鐨勫叧閿箣澶勫湪浜庢剰璇嗗埌錛?span style="COLOR: #ff6600">鍙湁閭d簺鍦ㄥ墠涓閬嶆澗寮涗腑鏀瑰彉浜?jiǎn)璺澕浿M及璁″肩殑鐐癸紝鎵嶅彲鑳藉紩璧蜂粬浠殑閭繪帴鐐圭殑璺濈浼拌鍊肩殑鏀瑰彉銆?/span>鍥犳錛岀敤涓涓厛榪涘厛鍑虹殑闃熷垪鏉ュ瓨鏀捐鎴愬姛鏉懼紱鐨勯《鐐廣傚垵濮嬫椂錛屾簮鐐?/span>s鍏ラ槦銆傚綋闃熷垪涓嶄負(fù)絀烘椂錛屽彇鍑哄棣栭《鐐癸紝瀵瑰畠鐨勯偦鎺ョ偣榪涜鏉懼紱銆傚鏋滄煇涓偦鎺ョ偣鏉懼紱鎴愬姛錛屼笖璇ラ偦鎺ョ偣涓嶅湪闃熷垪涓紝鍒欏皢鍏跺叆闃熴傜粡榪囨湁闄愭鐨勬澗寮涙搷浣滃悗錛岄槦鍒楀皢涓虹┖錛岀畻娉曠粨鏉熴?/span>SPFA綆楁硶鐨勫疄鐜幫紝闇瑕佺敤鍒頒竴涓厛榪涘厛鍑虹殑闃熷垪 queue 鍜屼竴涓寚紺洪《鐐規(guī)槸鍚﹀湪闃熷垪涓殑 鏍囪鏁扮粍 mark銆備負(fù)浜?jiǎn)鏂逛究鏌ユ壘鏌愪釜椤剁偣鐨勯偫L帴鐐癸紝鍥鵑噰鐢ㄤ復(fù)鐣岃〃瀛樺偍銆?/span>
紼嬪簭瀛樺偍鍦?/span> spfa.pas涓備互usaco 3.2.6 璇曢2涓轟緥銆傜敤閭繪帴琛ㄥ啓鐨勭▼搴忋?/span>
闇瑕佹敞鎰忕殑鏄細(xì)浠呭綋鍥句笉瀛樺湪璐熸潈鍥炶礬鏃訛紝SPFA鑳芥甯稿伐浣溿傚鏋滃浘瀛樺湪璐熸潈鍥炶礬錛岀敱浜庤礋鏉冨洖璺笂鐨勯《鐐規(guī)棤娉曟敹鏁涳紝鎬繪湁欏剁偣鍦ㄥ叆闃熷拰鍑洪槦寰榪旓紝闃熷垪鏃犳硶涓虹┖錛岃繖縐嶆儏鍐典笅SPFA鏃犳硶姝e父緇撴潫銆?/span>
鍒ゆ柇璐熸潈鍥炶礬鐨?/span>鏂規(guī)寰堝錛屼笘闂存祦浼犳渶騫跨殑鏄褰曟瘡涓粨鐐硅繘闃熸鏁幫紝瓚呰繃|V|嬈¤〃紺烘湁璐熸潈
榪樻湁涓縐嶆柟娉曚負(fù)璁板綍榪欎釜緇撶偣鍦ㄨ礬寰勪腑澶勪簬鐨勪綅緗紝ord[i]錛屾瘡嬈℃洿鏂扮殑鏃跺?/span>ord[i]=ord[x]+1錛岃嫢瓚呰繃|V|鍒欒〃紺烘湁璐熷湀.....
鍏朵粬鏂規(guī)硶榪樻湁寰堝錛屾垜鍙嶅掕寰楁祦浼犳渶騫跨殑鏂規(guī)硶鏄渶鎱㈢殑.......
鍏充簬SPFA鐨勬椂闂村鏉傚害錛屼笉濂藉噯紜及璁★紝涓鑸涓烘槸 O錛?/span>kE錛夛紝k鏄父鏁?/span>
涓婅堪浠嬬粛鐨?/span>Bellman-Ford綆楁硶鍙?qiáng)涓たU嶇殑浼樺寲錛屽彧鏄湪鐞嗚涓婂垎鏋愪簡(jiǎn)鏃墮棿澶嶆潅搴︼紝鐢ㄥ疄闄呯殑鏁版嵁嫻嬭瘯錛屼細(xì)鏈変粈涔堢粨鏋滃憿錛熶負(fù)姝わ紝鎴戜滑閫夋嫨 usaco 3.2.6銆?/span>
Spfa鐨勬椂闂存晥鐜囪繕鏄緢楂樼殑銆傚茍涓?/span>spfa鐨勭紪紼嬪鏉傚害瑕佹瘮Dijksta+heap浼樺寲瑕佸ソ鐨勫銆?/span>
緇忚繃浼樺寲Bellman-Ford綆楁硶鏄潪甯鎬紭鍖栫殑姹傚崟婧愭渶鐭礬寰勭殑綆楁硶錛?/span>SPFA鏃墮棿鏁堢巼瑕佷紭浜庣涓縐嶄紭鍖栧艦寮忥紝浣嗙涓縐嶄紭鍖栧艦寮忕殑緙栫爜澶嶆潅搴︿綆浜?/span>SPFA銆備袱縐嶄紭鍖栧艦寮忕殑緙栫▼澶嶆潅搴﹂兘浣庝簬Dijkstra綆楁硶銆傚鏋滃湪鍒ゆ柇鏄惁瀛樺湪璐熸潈鍥炶礬錛屾帹鑽愪嬌鐢ㄧ涓縐嶄紭鍖栧艦寮忥紝鍚﹀垯鎺ㄨ崘浣跨敤SPFA銆?/span>