題意:
給你n個點,告訴你每個點u可以到達的點v,但是可以到達的點又分兩類:一類可以直接到達;另一類要經過一次「轉換」後可以到達。現在問你點a到點b至少要「轉換」幾次能到達。如果a不能到b則輸出「-1」,否則輸出要「轉換」的最少次數。
思路:最小費用最大流
建圖:(1):每個點向他可以到的第乙個點連,和他可以到達的其餘點連
(2):scr向a連<1,0>
(3):b向sink連<1,0>
(4):然後從scr向sink找增廣路
(5):找到則輸出dis[sink];否則輸出-1
code:
/*最小費用最大流*/
/*建圖:
(1):每個點向他可以到的第乙個點連,和他可以到達的其餘點連(2):scr向a連<1,0>
(3):b向sink連<1,0>
(4):然後從scr向sink找增廣路
(5):找到則輸出dis[sink];否則輸出-1
*//*ac**:16ms*/
#include #include #include #include #include #define maxn 105
#define inf 1e8
#define max(a,b) (a>b?a:b)
#define min(a,b) (aq;
bool spfa(int s,int t,int n)
}} }
if(dis[t]!=inf) return true;
return false;
}void solve()
int main()
return 0;
}
POJ 1847 Tram 單源最短路徑
題意 軌道網,有若干轉換器,每個轉換器都和其他若干轉換器相連,轉換器初始指向第乙個與其相連的轉換器。問要到達終點需要最少轉換多少次?思路 可以用dijkstra單源最短路來做,把軌道網看做有向圖 因為1第乙個指向2,2的第乙個不一定指向1 當前轉換器處始指向的那個轉換器之間的路徑權值為0,其他路徑權...
POJ2195 Going home 最小費用流
建立源點s,匯點t,s與每個人之間建邊,費用為0,容量為1,每個房子與t建邊,費用為0容量為1,每個人與每個房子之間建邊,費用為人到達房子的距離,容量為1,則該題轉化為求最小費用流問題。include include include include define max 1 31 1 define ...
poj 3680(最小費用流)
傳送門 問題 數軸上有若干個帶權值的閉區間 劉汝佳藍書p367寫的是左閉右開區間,個人根據樣例資料和解法推測應該是筆誤 選出一些區間使權值和盡量大且任意乙個數均被覆蓋k次 題解 經典的最小費用流模型,連邊方法寫在 開頭,具體為什麼要這樣連邊本蒟蒻也不易表述清楚,但是在紙上模擬幾組資料發現確實是對的,...