網路流強化 HDU4280

2022-05-13 19:16:32 字數 1774 閱讀 5222

陣列沒開夠居然顯示tle而不是re,自己覺得好的優化的方法沒什麼用……

//

帶解釋的

//形式和我的比較相近的

#include#include

#include

using

namespace

std;

#define maxe 400096 //

pay 雙向邊 一共10萬條路 雙向就是20萬 反邊就是40萬

#define maxv 100005 //

pay#define maxn 55 //

pay#define sc scanf

#define pt printf

#define rep(i,a,b) for(int i=(a);i<(b);++i)

const

int inf = 0x3f3f3f3f

; int cg,sp,ins; //

cg change sp是總流量 ins是加速回溯點

intt,n,m ,s,t;

intq[maxv],fro,rea;

typedef

struct

eded;

ed e[maxe];

intwho_is_westernest,who_is_easternest,wx,ex;

int tot,head[maxv],cur[maxv],vis[maxv],bk[maxv],d[maxv],num[maxv]; //

int mi(int a,int b)

int mx(int a,int b)

void add(int u,int v,int

cap) //

僅有一次的bfs為isap節省了不少時間

bool

bfs()}}

return

vis[s];}//

增廣int

augment()

cg = e[i^1

].v;

}cg =t;

//從匯點到源點更新流量

while (cg !=s)

return

flow;}//

由於每次修改層次的時候,都是在到剩下子節點的距離中挑選最短的加1 所以層次分明不會出現死迴圈

intmax_flow()

advanced = false

;

for (i = cur[u]; i!=-1; i=e[i].nxt)

}if (!advanced)

}if (--num[d[u]] == 0) break; //

gap 優化

++num[d[u] = m+1

];

//我以前一直在想 如果沒有找到怎麼辦呢 現在發現原來找不到的話距離會被賦成n+1

if (u !=s)

u = e[bk[u]^1

].v;}}

return

flow;

}void

init()

intmain()

s=who_is_westernest,t=who_is_easternest;

for(i=1;i<=m;++i) sc("

%d%d%d

",&u,&v,&w),add(u,v,w),add(v,u,w);

sp =max_flow();

pt("%d\n

",sp);

}return0;

}

hdu4280 網路流模版)

驗證了一下網路流的板子題 發現有乙個板子和kuangbin聚聚的板子效率相差不多可能還更高效 kuangbin聚聚寫的是非遞迴的 這個可能更容易敲一點 題目大意就是輸入n,m 找到s t 直接連圖求最大流 附鏈結 include include include include includeusin...

hdu 4280 網路流 sap 點邊資料很大

匆匆過客 題意 有n個島嶼 m條無向路 每個路有一最大允許的客流量,求從最西的那個島嶼最多能運用多少乘客到最東的那個島嶼。思路 很單純的網路流,重點是卡時間 模板的高效性很重要啊該模板詳解 參見這裡 模板題就不注釋了 include include define vm 100010 define e...

dinic演算法的學習 hdu4280

最近在學習網路流部分,之前看了一下dinic演算法,一直沒機會嘗試一下,今天終於體驗了一下,然後就做一下總結 在做題過程中使用了鄰接表,dinic演算法,以及乙個超神的擴充套件棧空間的語句 具體步驟在下面的 中體現 include include pragma comment linker,stac...