Pagini recente » Cod sursa (job #194729) | Cod sursa (job #1808318) | Cod sursa (job #1376763) | Cod sursa (job #2223754) | Cod sursa (job #2842213)
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define pf push_front
#define MOD 1000000007
#define MAX 1005
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
pair < int, int > a[MAX][MAX];
int n, r, I, J, minn[MAX];
bool gasit, viz[MAX];
void dfs(int nod);
int main()
{
int m, i, x, y, z;
fin >> n >> m;
for(i = 1; i <= m; i++)
{
fin >> x >> y >> z;
a[x][y].second = z;
}
gasit = 1;
while(gasit == 1)
{
for(i = 1; i <= n; i++) viz[i] = 0;
minn[0] = INT_MAX, gasit = 0, I = J = 0;
dfs(1);
if(gasit == 1) r += minn[J];
}
fout << r;
return 0;
}
void dfs(int nod)
{
int i;
viz[nod] = 1;
for(i = 1; gasit == 0 && i <= n; i++)
if(a[nod][i].second - a[nod][i].first > 0 && viz[i] == 0)
{
minn[++I] = min(minn[I-1], a[nod][i].second - a[nod][i].first);
if(i != n) dfs(i);
else gasit = 1, J = I;
if(gasit == 1)
{
a[nod][i].first += minn[J];
a[i][nod].first -= minn[J];
}
else I--;
}
}