#include <iostream>
#define MAXN 200
using namespace std;
int C[MAXN][MAXN];
int F[MAXN][MAXN];
int P[MAXN];
int M[MAXN];
int N, S, T;
void dfs(int u)
{
for (int i = 0; i < N; i++)
{
if (P[i] == -1 && C[u][i] > F[u][i])
{
P[i] = u;
M[i] = min(M[u], C[u][i] - F[u][i]);
if (i == T)
return;
dfs(i);
if (M[T] != INT_MAX)
return;
}
}
}
int find()
{
fill_n(M, MAXN, INT_MAX);
fill_n(P, MAXN, -1);
P[S] = -2;
dfs(S);
if (M[T] == INT_MAX)
return 0;
else
return 1;
}
int maxflow()
{
int flow = 0;
int u, v;
while (find())
{
for (v = T; v != S; v = u)
{
u = P[v];
F[u][v] += M[T];
F[v][u] -= M[T];
}
flow += M[T];
}
return flow;
}
int main()
{
int m;
int a, b, c;
while (scanf("%d %d", &m, &N) != EOF)
{
memset(C, 0, sizeof(C));
memset(F, 0, sizeof(F));
while (m--)
{
scanf("%d %d %d", &a, &b, &c);
C[a-1][b-1] += c;
}
S = 0;
T = N - 1;
printf("%d\n", maxflow());
}
return 0;
}
#define MAXN 200
using namespace std;
int C[MAXN][MAXN];
int F[MAXN][MAXN];
int P[MAXN];
int M[MAXN];
int N, S, T;
void dfs(int u)
{
for (int i = 0; i < N; i++)
{
if (P[i] == -1 && C[u][i] > F[u][i])
{
P[i] = u;
M[i] = min(M[u], C[u][i] - F[u][i]);
if (i == T)
return;
dfs(i);
if (M[T] != INT_MAX)
return;
}
}
}
int find()
{
fill_n(M, MAXN, INT_MAX);
fill_n(P, MAXN, -1);
P[S] = -2;
dfs(S);
if (M[T] == INT_MAX)
return 0;
else
return 1;
}
int maxflow()
{
int flow = 0;
int u, v;
while (find())
{
for (v = T; v != S; v = u)
{
u = P[v];
F[u][v] += M[T];
F[v][u] -= M[T];
}
flow += M[T];
}
return flow;
}
int main()
{
int m;
int a, b, c;
while (scanf("%d %d", &m, &N) != EOF)
{
memset(C, 0, sizeof(C));
memset(F, 0, sizeof(F));
while (m--)
{
scanf("%d %d %d", &a, &b, &c);
C[a-1][b-1] += c;
}
S = 0;
T = N - 1;
printf("%d\n", maxflow());
}
return 0;
}
浙公网安备 33010602011771号