#include <cstdio> #include <iostream> #include <cstring> #include<queue> #include<cmath> using namespace std; const int INF = 0x3fffffff; int g[1005][1005]; int pre[1005]; int m; int bfs(int s,int t) { queue<int>q; q.push(s); memset(pre,0,sizeof(pre)); pre[s] = 1; while(q.size()) { int v = q.front(); q.pop(); for(int i=1;i<=m;i++) { if(pre[i]==0 && g[v][i]>0) { pre[i] = pre[v] + 1; q.push(i); } } } if(pre[t]==0) return 0; return 1; } int dfs(int s,int t,int f) { if(s==t) return f; for(int i=1;i<=m;i++) { if(g[s][i] && pre[i]==pre[s]+1) { int d = dfs(i,t,min(f,g[s][i])); if(d>0) { g[s][i]-=d; g[i][s]+=d; return d; } } } return 0; } int find_flows(int s,int t) { int f = 0; while(bfs(s,t)) { f += dfs(s,t,INF); } return f; } int main() { int a, b, len; int s, t, p; scanf("%d%d", &m, &p); scanf("%d%d",&s,&t); memset(g,0,sizeof(g)); while(p--) { scanf("%d%d%d", &a, &b, &len); g[a][b] += len; } printf("%d ", find_flows(s,t)); return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。