dinic演算法是經典的網路最大流演算法,該演算法由在ek演算法的基礎上增加"分層"這一概念得到。演算法複雜度為
分層操作:
演算法主體(dinic):
最終,我們在不斷分層和由源點進行dinic演算法的過程中獲得了整體的最大流。
#include#include#include#includeusing namespace std;
const int maxn=1000010,maxm=1000010;
struct edgee[maxm];
int head[maxn];
int edgecnt=1;//反向邊,所以邊計數從1開始
void addedge(int u,int v,int w)
int s,t;
int d[maxn];//層數
bool bfs()}}
return d[t]!=0;
}int dinic(int x,int flow)
}return flow-rest;
}int inf=1<<30;
int main()
int nowflow,ans=0;
while(bfs())
while(nowflow=dinic(s,inf))
ans+=nowflow;
cout<
return 0;
}
關於變數資料型別的幾點討論 一
variant 變數的格式有 ole定義,可以存放任何型別的資料,並以下圖的格式用 16個位元組存放某些變數。0 12 78 15 vartype unused value 第 0和1位元組儲存乙個整數值,以指明在第 8 15 位元組中存放的是何種型別的資料,第2到 7位元組一般情況下沒有用,並且在...
dinic演算法的改進
儲存鄰接表是使用的是head陣列,現在另設乙個head2陣列,儲存的是每個節點x從head2 x 開始的邊才會有增廣路,這樣減少了無用邊的迴圈。並且head2陣列只在全域性初始化一次,即如果沒有增廣,該值只會逐漸減小直到0。在hdu3572中使用該優化可使時間從998ms優化值156ms 附上 注釋...
Dinic演算法的程式實現
program poj 1273 dinic author comzyh include include include include define min x,y x0 if dis n 0 return 1 else return 0 匯點的dis小於零,表明bfs不到匯點 find代表一次增...