最大流模板題 HDU 1532

2021-09-25 23:38:03 字數 2075 閱讀 3752

hdu 1532

題意:給你m條邊(但向邊),n個點,n個點的編號為1到n,問從1到n的最大流是多少。

最大流模板題,聽說有重邊,但是沒管重邊這個事也過了。

dinic演算法:

#include#define mem(a,b) memset((a),b,sizeof(a))

#define de coutvoid add(int x,int y,int z)

bool bfs()

}return 0;

}int dinic(int x,int flow)

return flow-=rest;

}void init() //多組輸入,記得初始化

int main()

return 0;

}

實際上最小費用最大流和最大費用最大流的模板是一樣的,只需要稍微改一下就行了。d陣列初始化改一下,spfa函式中大於號小於號改一下,還有加邊時候的費用要不要乘 -1,輸出費用的時候要不要乘 -1,其他的都一樣。

poj 2195 最小費用最大流

題意:多組輸入,每組資料先給你兩個數n和m,表示有乙個n乘m的網格,網格中的點表示空地,m表示人,h表示房子,其中人的數目等於房子的數目,問你人走進房子的步數和最小是多少,輸出這個步數和。

#include#include#include#include#include#include#include#include#define mem(a,b) memset((a),b,sizeof(a))

#define de coutq.push(s);

d[s]=0;

v[s]=1;

incf[s]=1<<30;

while(q.size())}}

if(d[t]==0x3f3f3f3f)

return false;

return true;

}void update()

maxflow+=incf[t]; //最大流

ans+=d[t]*incf[t]; //最小費用

}void init()

int main()

}for(int i=1;i<=n;i++)

for(int j=1;j<=m;j++)

else

}s=cnt+1;

t=cnt+2;

while(spfa())

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

}return 0;

}

poj 3422 最大費用流

#include#include#include#include#include#include#include#include#include#include#define mem(a,b) memset((a),b,sizeof(a))

typedef long long ll;

typedef unsigned long long ull;

const double pi=acos(-1.0);

using namespace std;

const int n=5010,m=200010;

int ver[m],edge[m],cost[m],next[m],head[n];

int d[n],incf[n],pre[n],v[n];

int n,k,tot,s,t,maxflow,ans;

void add(int x,int y,int z,int c)

int num(int i,int j,int k)

bool spfa()}}

if(d[t]==0xcfcfcfcf)

return false;

return true;

}void update()

maxflow==incf[t];

ans+=d[t]*incf[t];

}int main()

while(spfa())

update();

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

return 0;

}

hdu1532 最大流板子題

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

hdu 1532最大流 增廣路

include include include includeusing namespace std define max 210 int flow max max int pre max mark max int n,m,f int q,z void maxliu if mark n 如果mark...

hdu1532 網路流最大流問題

這是我的網路流第一題,用的是增廣路演算法即ek演算法,演算法思想 每次用bfs找一條最短的增廣路徑,然後沿著這條路徑修改流量值 實際修改的是殘量網路的邊權 順帶修改反圖的殘餘網路的邊權。當沒有增廣路時,演算法停止,此時的流就是最大流。還有這裡之所以要建反圖是因為,bfs找最短的增廣路的時候是隨機找的...