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最大...