HDU 5045 費用流求最大權

2021-12-29 16:22:47 字數 1121 閱讀 8725

題意:有n個人和m到題目,每個人做對的概率以矩陣形式給出,問如何分配才可以使做對的概率最大,有乙個限制條件是做到目前為止每兩個人的做題數量差距不能超過1,也就是前n道題目,必須一人做乙個

思路:網上都是dp多一點,用網路流也可以,不過麻煩很多,可是本弱是一點dp都不會的選手啊,只能用網路流了,對於那個限制條件,我們可以以前n道題建一次圖,然後再來n個,不過就直接建完就可以了,然後我們要求的是什麼呢,很明顯是最大權,而最大費用最大流剛好可以解決,這裡面的費用流有兩種方法,用spfa找最短路或者用dijkstra找最短路,用spfa會方便很多,因為它可以處理帶負的權值邊,dijkstra不可以,這道題就是要講權值變負,求最小費用最大流,然後將結果取負就可以了,本弱喜歡用dijkstra,處理的很麻煩,有興趣的可以看看,建議用spfa

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

typedef long long ll;

const double inf=1000.0;

const int maxn=1050;

typedef pair p;

struct edge;

};vectorg[maxn];

double h[maxn],dis[maxn];

int prevv[maxn],preve[maxn];

void addedge(int st,int en,int cap,double cost)

double min_cost_flow(int st,int en,int f)}}

if(dis[en]==inf) return -1;

for(int i=0;imax1) max1=a[i][j];

a[i][j]*=-1;}}

max1+=1;

for(int i=1;i<=n;i++)

for(int j=1;j<=m;j++) a[i][j]+=max1;

int t=1;

while(t<=m){

for(int i=0;i

hdu4971 流 最大權閉包

題意 給了一些任務,然後給了一些完成某些任務的限制,然後又給了限制之間的拓撲關係,最後問你最大收益。思路 很直白,就是流的乙個應用,最大權閉包,沒涉及到什麼想法的地方,建圖也不坑,直接說建圖吧,s 所有任務 流量是 任務價值 所有限制 t 流量是 限制代價 a b 流量 inf a限制的拓撲關係在b...

HDU4862 Jump(最大流量最大費用流)

題意 有n m的格仔,每乙個格仔包含乙個數字,0 9。你初始的能量為0,你可以玩k次,每乙個你可以選擇你現在的格仔的正下方或者正右方的任意乙個格仔跳,但必須是之前沒有跳過的格仔。每玩一次你都可以跳任意次。每跳一次,從 x1,y1 到 x2,y2 你將花費 x1 x2 y1 y2 1的能量,如果起止格...

poj3680將最大權重轉換為最小費用流

思路 將n個區間的端點當成頂點,然後區間連邊,容量為1那麼每個區間選擇一次,同時根據可以被k個區間覆蓋讓流量為k那麼從i點到j點的流量和為k保證每個區間不被包含k次以上 轉換成最短路徑問題而且是最大權值對應的最小費用流就是取反,看負數越小那麼權重越大 592k 1469ms include incl...