網路流學習筆記(2)

2021-08-11 04:54:47 字數 1020 閱讀 3668

最小費用最大流:在保證最大流的前提下,讓費用最小。

我們有兩種思路:

1.先保證流最大,再去找費用最小的。

2.保證費用最小,去找最大流。

通常情況下我們會選擇第二種。我們想一下最大流是怎麼做的,bfs分層圖然後dfs每次只找深度+1的去增廣。

如果我們要保證最小費用呢?每次去找費用最小的增廣。

我們可以spfa先處理出最小費用以及到那個節點的邊。(pre)。

增廣時按這些邊去處理殘量和費用。

#include

using

namespace

std;

#define ll long long

#define mp make_pair

typedef pairpar;

const

int inf=1e8+5;

const

int maxn=8e4+5;

int n,m,s,t;

struct edgee[maxn<<1];

int head[maxn],cnt=1;

inline

void add(int u,int v,int w,int c),head[u]=cnt;}

int dis[maxn],pre[maxn];

bool vis[maxn];

queue

q;bool spfa(int x)}}

}}

if(dis[t]==inf)return

0; return1;}

par mcmf()

for(int i=pre[t];i;i=pre[e[i].u])

flow+=tem;

}return mp(flow,ans);

}int main()

par ans=mcmf();

printf("%d %d\n",ans.first,ans.second);

return

0;}

網路流學習筆記

先宣告,來自網路,寫得也比較亂,如果有任何問題可以聯絡博主。首先,我們來理解下網路流。在乙個有向圖上選擇乙個源點,乙個匯點,每一條邊上都有乙個流量上限 以下稱為容量 即經過這條邊的流量不能超過這個上界,同時,除源點和匯點外,所有點的入流和出流都相等,而源點只有流出的流,匯點只有匯入的流。這樣的圖叫做...

網路流 學習筆記

略。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...

網路流學習筆記

基本思路 實現 include include include include using namespace std const int maxn 100 const int maxm maxn maxn const int inf 0x3f3f3f3f int head maxn next ma...