題解 洛谷P3376 模板 網路最大流

2022-05-16 10:40:33 字數 2702 閱讀 9696

portal1:luogu

如題,給出乙個網路圖,以及其源點和匯點,求出其網路最大流。

第一行包含四個正整數\(n,m,s,t\),分別表示點的個數,有向邊的個數,源點序號,匯點序號。

接下來\(m\)行每行包含三個正整數\(u_i,v_i,w_i\),表示第\(i\)條有向邊從\(w_i\)出發,到達\(v_i\),邊權為\(w_i\)(即該邊最大流量為\(w_i\))。

一行,包含乙個正整數,即為該網路的最大流。

4 5 4 3

4 2 30

4 3 20

2 3 20

2 1 30

1 3 40

50
資料規模:

對於\(30\%\)的資料:\(n \leq 10,m \leq 25\);

對於\(70\%\)的資料:\(n \leq 200,m \leq 1000\);

對於\(100\%\)的資料:\(n \leq 10000,m \leq 100000\)。

樣例說明:

題目中存在\(3\)條路徑:

\(4 \to 2 \to 3\),該路線可通過\(20\)的流量

\(4 \to 3\),可通過\(20\)的流量

\(4 \to 2 \to 1 \to 3\),可通過\(10\)的流量(邊\(4 \to 2\)之前已經耗費了\(20\)的流量)

故流量總計\(20+20+10=50\),輸出\(50\)。

模板題,求最大流。

emonds karp(ek)演算法

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

const int inf=0x3f3f3f3f, maxn=10005, maxm=200005;

int n, m, s, t, u, v, val, cnt, head[maxn], dis[maxn], pre[maxn];

queueq;

struct node edge[maxm];

inline void addedge(int u, int v, int w)

inline bool emonds_karp()

if (dis[t]) break;}}

return dis[t];

}int main()

int ans=0;

while (emonds_karp())

ans+=dis[t];

}printf("%d\n",ans);

return 0;

}

dinic演算法

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

const int inf=0x3f3f3f3f, maxn=10005, maxm=200005;

struct node edge[maxm];

queueq;

int n, m, s, t, u, v, cnt, val, dis[maxn], head[maxn];

inline void addedge(int u, int v, int w)

inline bool bfs() }}

if (~dis[t]) return 1;

return 0;

}inline int dfs(int u, int flow)

}return flow-ret;

}inline int dinic()

int main()

printf("%d\n",dinic());

return 0;

}

improved shortest augmenting path(isap)演算法

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

const int inf=0x3f3f3f3f, maxn=10005, maxm=200005;

queueq;

int n, m, s, t, u, v, val, cnt, ans, head[maxn], head1[maxn], deep[maxn], pre[maxn], a[maxn];

struct node edge[maxm];

inline void addedge(int u, int v, int w)

inline void bfs(int t)

}}int calc(int s,int t)

u=t;

while (u!=s)

return ans;

}inline void isap(int s, int t)

bool flag=0;

for (int &i=head1[u]; ~i; i=edge[i].nxt)

if (deep[u]==deep[edge[i].v]+1 && edge[i].w)

if (!flag)

}}int main()

isap(s, t);

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

return 0;

}

洛谷P3376 模板 網路最大流

如題,給出乙個網路圖,以及其源點和匯點,求出其網路最大流。輸入格式 第一行包含四個正整數n m s t,分別表示點的個數 有向邊的個數 源點序號 匯點序號。接下來m行每行包含三個正整數ui vi wi,表示第i條有向邊從ui出發,到達vi,邊權為wi 即該邊最大流量為wi 輸出格式 一行,包含乙個正...

洛谷 P3376 模板 網路最大流

題目描述 如題,給出乙個網路圖,以及其源點和匯點,求出其網路最大流。輸入格式 第一行包含四個正整數n m s t,分別表示點的個數 有向邊的個數 源點序號 匯點序號。接下來m行每行包含三個正整數ui vi wi,表示第i條有向邊從ui出發,到達vi,邊權為wi 即該邊最大流量為wi 輸出格式 一行,...

洛谷 P3376 模板 網路最大流

題目傳送門 如題,給出乙個網路圖,以及其源點和匯點,求出其網路最大流。第一行包含四個正整數n m s t,分別表示點的個數 有向邊的個數 源點序號 匯點序號。接下來m行每行包含三個正整數ui vi wi,表示第i條有向邊從ui出發,到達vi,邊權為wi 即該邊最大流量為wi 一行,包含乙個正整數,即...