負環與差分約束

2022-05-06 20:09:14 字數 805 閱讀 7242

跑\(spfa\)時,設\(sp\_cnt[x]\)表示從\(x\)入隊次數,若更新時, \(sp\_cnt[y]\gt n\) ,則說明圖中有負環,演算法正常結束,則圖中無負環

bool spfa()

}} }

return false;

}

差分約束系統即為\(n\)元一次不等式組,每個約束條件都是由兩個變數作差構成的,形如\(x_i-x_i \leqslant c_k\),目標為求出一組解可以滿足所有約束條件

\(x_i-x_j \leqslant c_k\)可變形為\(x_i \leqslant x_j+c_k\),與最短路中三角形不等式\(dis[y] \leqslant dis[x]+v\)相似,於是將不等式組中的變數看作點,每個約束條件\(x_i-x_j \leqslant c_k\)為從節點\(j\)向節點\(i\)連一條邊權為\(c_k\)的有向邊

在跑完最短路後,\(x_i=dis[i]\)為差分約束系統中的一組解,若存在負環和終點不可達時,無解

\(x_i-x_j \geqslant c_k\)變形為\(x_j-x_i \leqslant -c_k\)

\(x_i-x_j < c_k\)變形為\(x_i-x_j \leqslant c_k-1\)

\(x_i-x_j > c_k\)變形為\(x_i-x_j \geqslant c_k+1\)

\(x_i-x_j = c_k\)變形為\(x_i-x_j \leqslant 0\)且\(\ x_i-x_j \geqslant 0\)

必要時,建乙個超級源點

求解最大解用最短路,求解最小解用最長路

差分約束系統及判斷負環

簡介 背景是給你若干個不等式,形如xi xj bxi xj b,需要你判斷x的解的存在性或是最優解。而差分約束系統即為這個問題轉化為乙個圖論問題,進而跑最短路來判環或求最值距離 最優解 這裡轉化的原理是三角不等式,即d v d u cost u,v d v d u cost u,v 可以建為一條花費...

POJ 1364 King 差分約束 找負環

嘛,雖然是一道水題 模板題,不過還是學到了很多東西的,記錄一下。首先題目給出的不等式是小於,但是差分約束系統只能處理小於等於的情況,所以要轉化成小於等於的進行處理。對於整數處理方法非常簡單 然後是找負環的情況,其實不需要考慮圖連不連通,只要一開始就把所有的點的d置成0,然後都push進佇列裡面就好了...

POJ3169 簡單差分約束 記得判負環

題意 有n頭牛,他們按順序排成了一排,有些牛關係比較好,他們的距離不能超過某個距離,還有些牛關係不好,他們之間的距離不能小於某個距離,可能會有多頭牛擠在同一位置上,問1號牛和n號牛之間的最大距離是多少,如果不存在滿足條件的排列則輸出 1,如果距離無限大則輸出 2.分析 令d i 表示第i頭牛的位置,...