(文章更新中)
費用流(再不冒個泡我都以為我退役了)
(luogup3376最大流模板)
關於網路流的講解其實網上很多,具體的這裡就不再多說了,就說幾點新學網路流要注意的地方吧:
cnt要賦上初值,要麼為-1,要麼為1,這樣它是從2或者0開始的,保證了每次異或後的兩個邊是對應的
大部分情況下,盡量使用dinic演算法,雖然說ek也是很厲害的,但是網路流的玄學複雜度可能被卡
沒事的話不要瞎剪枝,我這個比較水的,之前瞎剪枝,模板跑得飛快,最後發現有問題是被幾道題卡到飛起(捂臉)
#include
#include
#include
#include
#include
using
namespace std;
#define re register
#define gc getchar()
inline
intread()
while
(ch>=
'0'&&ch<=
'9')
return x*f;
}const
int n=
100010
,inf=(1
<<29)
;struct node e[n<<1]
;int h[n]
,n,cnt=
1,s,t,m;
inline
void
add(
int u,
int v,
int w)
,h[u]
=cnt;
e[++cnt]
=(node)
,h[v]
=cnt;
}#define qxx(u) for(int i=h[u],v;v=e[i].to,i;i=e[i].next)
int deep[n]
;inline
intbfs()
}return deep[t];}
intdfs
(int u,
int flow)
if(res==flow) deep[u]=0
;return flow-res;
}int ans,maxf;
intmain()
while
(bfs()
) cout
}
其實這個就是一種比較dinic優秀的一種演算法,也可以進行當前弧優化,這個人後面再講
#include
#include
#include
#include
#include
using
namespace std;
#define re register
#define gc getchar()
inline
intread()
while
(ch>=
'0'&&ch<=
'9') x=
(x<<1)
+(x<<3)
+(ch^48)
,ch=gc;
return x*f;
}const
int n=
4001000
,inf=(1
<<29)
;struct node e[n<<4]
;int h[n]
,n,cnt=
1,s,t,m;
inline
void
add(
int u,
int v,
int w)
,h[u]
=cnt;
e[++cnt]
=(node)
,h[v]
=cnt;
}#define qxx(u) for(int i=h[u],v;v=e[i].to,i;i=e[i].next)
int deep[n]
,gap[n]
;void
bfs()}
return;}
int maxf;
intdfs
(int u,
int flow)
int used=0;
qxx(u)
if(e[i]
.w&&deep[v]+1
==deep[u])if
(used==flow)
return used;
}--gap[deep[u]];
if(gap[deep[u]]==
0)deep[s]
=n+1
; deep[u]++;
gap[deep[u]]++
;return used;
}void
isap()
intmain()
isap()
;return0;
}
做題思想
網路流的重點和難點其實是在建圖,它的模板其實不怎麼難,可就是看不出來這個是網路流或者看出來了卻無法建出準確的圖來。
在網路流的題目中,有乙個重要的結論:最大流=最小割,往往,題目問的都是關於最少捨棄多少之類的問題,這個時候就是最大流=最小割
題目總結:
(更新ing,還在一篇一篇的打,到時候直接轉過來就行了)
(我能說我還在更新嗎)
網路流 (基礎學習)
流網路g v,e 是乙個有向圖,其中每條邊 u,v e 均有一非負容量 c u,v 0,規定 若 u v e,則 c u,v 0。網路中由兩個特殊點 源點s和匯點t 網路中的邊相當於是粗細不同的水管,c u,v 相當於是水管的直徑。流網路g的流是乙個實值函式 f v v r,且滿足下列三個性質 1 ...
網路流學習筆記
先宣告,來自網路,寫得也比較亂,如果有任何問題可以聯絡博主。首先,我們來理解下網路流。在乙個有向圖上選擇乙個源點,乙個匯點,每一條邊上都有乙個流量上限 以下稱為容量 即經過這條邊的流量不能超過這個上界,同時,除源點和匯點外,所有點的入流和出流都相等,而源點只有流出的流,匯點只有匯入的流。這樣的圖叫做...
網路流 學習筆記
略。update 我發現我的最大流一直是寫錯的!寫錯一年了!這一年居然沒有被卡真是奇蹟 void dedge int sta,int edn,lon w fst sta ecnt void edge int sta,int edn,lon w bool bfs return 0 lon dfs in...