日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

最大流ISAP算法模板

發布時間:2025/3/16 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 最大流ISAP算法模板 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這兩天學習了最大流,下面是ISAP算法模板:

const int inf = 0x3fffffff; template <int N, int M> struct Isap {int top;int d[N], pre[N], cur[N], gap[N];struct Vertex{int head;} V[N];struct Edge{int v, next;int c, f;} E[M];void init(){memset(V, -1, sizeof(V));top = 0;}void add_edge(int u, int v, int c){E[top].v = v;E[top].c = c;E[top].f = 0;E[top].next = V[u].head;V[u].head = top++;}void add(int u,int v, int c){add_edge(u, v, c);add_edge(v, u, 0);}void set_d(int t){queue<int> Q;memset(d, -1, sizeof(d));memset(gap, 0, sizeof(gap));d[t] = 0;Q.push(t);while(!Q.empty()) {int v = Q.front(); Q.pop();++gap[d[v]];for(int i = V[v].head; ~i; i = E[i].next) {int u = E[i].v;if(d[u] == -1) {d[u] = d[v] + 1;Q.push(u);}}}}int sap(int s, int t, int num) {set_d(t);int ans = 0, u = s;int flow = inf;memcpy(cur, V, sizeof(V));while(d[s] < num) {int &i = cur[u];for(; ~i; i = E[i].next) {int v = E[i].v;if(E[i].c > E[i].f && d[u] == d[v] + 1) {u = v;pre[v] = i;flow = min(flow, E[i].c - E[i].f);if(u == t) {while(u != s) {int j = pre[u];E[j].f += flow;E[j^1].f -= flow;u = E[j^1].v;}ans += flow;flow = inf;}break;}}if(i == -1) {if(--gap[d[u]] == 0)break;int dmin = num - 1;cur[u] = V[u].head;for(int j = V[u].head; ~j; j = E[j].next)if(E[j].c > E[j].f)dmin = min(dmin, d[E[j].v]);d[u] = dmin + 1;++gap[d[u]];if(u != s)u = E[pre[u] ^ 1].v;}}return ans;} }; Isap<1000, 1000000> Sap;調用方式: Sap.init(); //建邊前調用 Sap.add(u, v, c); //在u->v之間建一條容量為c的邊 Sap.sap(s, t, num); //s為源點,t為匯點,num為邊的數量

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的最大流ISAP算法模板的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。