最大流板子

2021-10-01 12:24:46 字數 1505 閱讀 2110

isap演算法

時間複雜度:o(n^2m)

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

const int inf=0x3f3f3f3f;

int head[900], source, sink, nv, cnt;

int cur[900], num[900], d[900], pre[900], q[900];

struct node

edge[10000000];

void add(int u, int v, int cap)

void bfs()}}

}void isap()

}for(i=source; i!=sink; i=edge[cur[i]].v)

flow+=f;

u=pos;

}for(i=cur[u]; i!=-1; i=edge[i].next)

}if(i!=-1)

else

}d[u]=mind+1;

num[d[u]]++;

u=pre[u];}}

printf("%d\n",flow);

}int main()

return 0;

}

dinic+弧優化

#include #include #include #include #include using namespace std;

const int inf=0x3f3f3f3f;

const int maxn=505; //最大結點總個數

const int maxm=1000005; //最大邊的總條數:注意要包括反向邊個數,即總條數=正向邊總條數*2

int s; //源點

int t; //匯點

int head[maxn]; //點u鄰接表的第一條邊

int cnt; //邊的數量,從0開始編號

struct edge

e[maxm];

void addedge(int u,int v,int w) //新增一條u->v,最大容量為w的邊

int dis[maxn]; //dis陣列記錄層次

bool bfs() //利用bfs建立分成圖,從而可以多次dfs增廣}}

return false; //執行到此處,說明匯點已不可達,返回false

}int dfs(int u,int flow) //flow代表流入u點的最大流量}}

return 0; //無法繼續增廣,返回0

}int dinic()

return ans;

}void init()

hdu1532 最大流板子題

題目給出源點和漏點,還有一些邊,要求源與漏之間的最大流,我採用了edmonds karp演算法,該演算法是ford fulkerson演算法的一種實現,該演算法的關鍵技術是殘留網路和殘留網路上的反向邊,相當於給了搜尋策略乙個 反悔 的機會,演算法的實行過程是每次都尋找一條源點到漏點的增廣路徑,算出流...

模板 網路最大流 最大流

給出乙個網路圖,以及其源點和匯點,求出其網路最大流。in put role presentation inp utin put4 5 4 3 4 2 30 4 3 20 2 3 20 2 1 30 1 3 40ou tput role presentation out puto utpu t50最大...

模板 網路最大流 最大流

給出乙個網路圖,以及其源點和匯點,求出其網路最大流。in put role presentation inp utin put4 5 4 3 4 2 30 4 3 20 2 3 20 2 1 30 1 3 40ou tput role presentation out puto utpu t50最大...