Pagini recente » Cod sursa (job #2790837) | Cod sursa (job #2706947) | Cod sursa (job #2768906) | Cod sursa (job #2721450) | Cod sursa (job #282518)
Cod sursa(job #282518)
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
const int maxn = 1001;
#define inf 0x3f3f3f3f
vector<int> g[maxn];
int cap[maxn][maxn], flux[maxn][maxn];
int t[maxn];
int n;
int S, D;
void read()
{
int m;
scanf("%d%d", &n, &m);
for(; m; --m)
{
int x, y, z; scanf("%d%d%d", &x, &y, &z);
cap[x][y] += z;
g[x].push_back(y);
g[y].push_back(x);
}
S = 1; D = n;
}
int bfs()
{
int viz[maxn];
for (int i = 0; i <= D; ++i) viz[i] = 0;
queue<int> Q;
Q.push(S); viz[S] = 1;
while (!Q.empty())
{
int now = Q.front();
Q.pop();
for (int i = 0; i < g[now].size(); ++i)
{
int next = g[now][i];
if (viz[next]) continue;
if (cap[now][next] == flux[now][next]) continue;
t[next] = now;
Q.push(next); viz[next] = 1;
if (next == D) return 1;
}
}
return 0;
}
int f()
{
int flow = 0;
while (bfs())
{
int minn = inf;
for (int i = D; i != S; i = t[i])
if (minn > cap[t[i]][i] - flux[t[i]][i]) minn = cap[t[i]][i] - flux[t[i]][i];
for (int i = D; i != S; i = t[i])
{
flux[t[i]][i] += minn;
flux[i][t[i]] -= minn;
}
flow += minn;
}
return flow;
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
read();
printf("%d\n", f());
return 0;
}