不一樣的網路流系列 Dinic跑得快

2022-03-19 23:10:12 字數 1123 閱讀 1577

擺王興致衝衝地跑到我們機房來對我說跟你講乙個黑科技。。。

我們發現如果dinic不建反向邊會跑的飛起(當然wa是必然的)

所以考慮在加反向邊的基礎上優化.

首先我們記錄網路中最大的乙個流量,設它為min,然後:

把所有小於min的邊都加入網路中

最大流+=dinic()

min /= 2

到1然後在dinic時不走反向邊(但是值要改變),最後在可以走反向邊的情況下再來一次

注意bfs的一些操作,如果不當會溢位...

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

#define ll long long

#define re register

#define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)

#define int ll

inline int gi()

while(ch>='0' && ch<='9')

return f*sum;

}const int n=500010,m=2000010,inf=1e10+10;

int n,m,s,t,ans,dep[n],cur[n];

struct node

e[m];

vectorfront[n];

vectore;

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

); e.push_back((node));

front[u].push_back(e.size()-2);

}bool cmp(node a,node b)

queueq;

bool bfs()}}

return dep[t]<1e9;

}int dfs(int u,int flow)

ans+=dinic();}}

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

return 0;

}

不一樣又不一樣的 木板接水

空地上豎立著n個從左到右排列的木板,它們可以把水擋住,但溢位最邊上木板的水將會流到空地上。已知木板間距都是單位1,現給定每個木板的高度,請求出總共能接住的水量?說明一點,這裡只考慮間距 寬度 和高度,不考慮第三個維度,因此水量是平方單位。木板高度分別是2,1,3,那麼我們可以接住2 2 4平方單位的...

我們不一樣

前輩們因自身實際的種種因素的影響而產生的認知,並不一定適用於我們自身。你可能從來不會去想乙個問題 你的觀點,來自 其實,它們絕大部分來自網路,它們或多或少地蠶食了你的判斷力。未來的路要怎麼走,沒有對與錯。有的,只是每乙個選擇所需要承擔的責任。我不想面臨,後之視今亦猶今之視昔的悲哀。我希望,未來回首,...

我們不一樣

這麼多年的兄弟 有誰比我更了解你 太多太多不容易 磨平了歲月和脾氣 時間轉眼就過去 這身後不散的筵席 只因為我們還在 心留在原地 張開手 需要多大的勇氣 這片天 你我一起撐起 更努力 只為了我們想要的明天 好好的 這份情好好珍惜 我們不一樣 每個人都有不同的境遇 我們在這裡 在這裡等你 我們不一樣 ...