poj1459多源多匯最大流問題

2022-05-04 10:18:10 字數 886 閱讀 7554

/*基本構圖題,多源多匯,新增乙個源點和乙個匯點,所有源點都來自這個源點,同理,所有匯點

都匯於這個匯點,dinic第二戰,本來應該1a的,犯了乙個低階錯誤!while(scanf("%d))要加「~」啊!

sb了,記住這個教訓!此次順帶學習了scanf的又一讀入,忽略空格和已有符號,不錯,並且更加了解了

dinic演算法(為什麼要新增反向弧?反向弧其實是提供悔棋的機會(每次回走相當於原來的流量又回來了(直接把容量看成剩餘的流量),二,這題本身有反向弧,直接疊加即可,若走原圖反向弧,相當於走這條路,走新增的反向弧,相當於反悔))。

但是為什麼我的dinic要900ms啊!*/ 

未1a原因:while(scanf...)!!~~~~~!!!

#include//900ms

#include#include#includeusing namespace std;

int n,np,nc,m;

const int inf=0x3f3f3f3f;

struct edge

;edge e[24000];int head[120];

int vis[120],level[120];

bool bfs()}}

return vis[n+1];

}int dfs(int u,int minf) //minf 是目前為止殘量

int nowsumflow=0,zhihouflow;

for(int i=head[u];i!=-1&&minf;i=e[i].pre)

{int v=e[i].to;int temp=e[i].flow;

if(level[v]==level[u]+1&&temp>0)

{zhihouflow=dfs(v,minf

poj1459多源多匯最大流問題

基本構圖題,多源多匯,新增乙個源點和乙個匯點,所有源點都來自這個源點,同理,所有匯點 都匯於這個匯點,dinic第二戰,本來應該1a的,犯了乙個低階錯誤!while scanf d 要加 啊!sb了,記住這個教訓!此次順帶學習了scanf的又一讀入,忽略空格和已有符號,不錯,並且更加了解了 dini...

poj1459多源點多匯點最大流

題意 有許多發電廠,需求電的地方 就說耗電場吧 和一些中轉站,要求出各個耗電場耗電之和,並使之最大。其中邊上的權值為能流通的最大電量。題目解析 這道題目也是很簡單的最大流題目,只需要新增乙個總的源點和乙個總的匯點,然後從總源點到子源點邊上的權值為子源點的發電量,從匯點到總匯點邊上的權值為子匯點的需求...

poj1459 多源點網路流

題意 有n個點,np個供電點,nc個消費點,m條線路,接來題目先給出的是m條帶權路徑,然後是np個供電點和權值,接著就是nc個消費點和權值。題目要我們求出給定的圖最大能消費的總電量 就是求最大流 思路 建乙個超級源點,乙個超級匯點。超級源點連線所以供電站,所以消費點連線超級匯點。跑一遍網路流即可。i...