網路流之Dinic 板子總結

2021-09-12 16:19:26 字數 1099 閱讀 9023

dinic演算法的時間複雜度的理論上界是

如果所有邊容量均為1,那麼時間複雜度是

對於二分圖最大匹配這樣的特殊圖,時間複雜度是

航神+濤神

下午濤神給航神例會講的dinic板子加了一行**

本來1996ms的**瞬間跑到了170ms

臥槽這dinic板子碉堡了我要總結一下

基本可過大部分卡dinic的板子,如hdu4280

hdu4280實測大概跑7700ms(時限10000ms),

而那道題用isap跑的話大概5000多ms

回頭再總結個isap的板子叭

網路流理解了原理之後當小黑盒使用就好

以hdu6214 smallest minimum cut 為例 

#include#include#include#include#includeusing namespace std;

typedef long long ll;

const int inf=0x3f3f3f3f;

const int maxn=210;

const int maxm=2e3+10;

int level[maxn];

int head[maxn],cnt;

int t,n,m;

int ss,ee;

struct edgee[maxm];

void init()

void add(int u,int v,ll w)

void add2(int u,int v,ll w,bool op)//是否為有向圖

bool bfs(int s,int t)

} }return 0;

}ll dfs(int u,ll maxf,int t)

} if(!ret)level[u]=-1;//優化,防止重搜,說明u這一路不可能有流量了

return ret;

}ll dinic(int s,int t)

int main()

ll ans=dinic(ss,ee);

printf("%lld\n",ans%10000);

}return 0;

}

網路流之Dinic演算法

初學網路流。存一下dinic板子。複雜度o n 2 m uva 1515 pool construction 把每個草地與 s 相連,花費為dig,每個洞與 t 相連,花費為 然後對於每個兩個相鄰的點連一條權值為 build 的邊。求最小割,就是把草和洞分開的花費。因為只有三種割的情況 割s與草之間...

網路流dinic演算法

遇到過不少網路流的題目,直接找增廣路徑的方法時間複雜度實在受不了。常面臨tle的問題。通過學習這個dinic演算法,不僅 短,效率也高。該演算法的重點在於乙個層次圖,是在普通增廣的方法上加了優化,普通的增廣是每次在圖上四處遊蕩,直到找到匯點為止。dinic演算法就是把每個點都給乙個等級level l...

模板 網路流 Dinic

const int maxn 207,inf 0x3f3f3f3f int n,m n個點,m條邊 int mp maxn maxn 鄰接矩陣 int que maxn maxn head,tail bfs佇列 首,尾 int dist maxn 距源點距離,分層圖 int ans bfs查詢是否連...