Pagini recente » Cod sursa (job #251320) | Cod sursa (job #2185624) | Cod sursa (job #1894268) | Cod sursa (job #1911032) | Cod sursa (job #2427032)
#include<fstream>
#include<vector>
using namespace std;
vector<int> g[100010];
int n, m;
int cost[1001][1001];
int exces[100010];
int h[100010];
ifstream cin("maxflow.in");
ofstream cout("maxflow.out");
void read()
{
cin >> n >> m;
int a, b, x;
for (int i = 1; i <= m; i++)
{
cin >> a >> b >> x;
g[a].push_back(b);
g[b].push_back(a);
cost[a][b] = x;
}
h[1] = n;
for (int i = 0; i < g[1].size(); i++)
{
exces[g[1][i]] = cost[1][g[1][i]];
}
}
void preflux()
{
while (3 > 2)
{
int ok=0;
for (int i = 2; i < n; i++)
{
if (exces[i] > 0)
{
for (int j = 0; j < g[i].size(); j++)
if (cost[i][g[i][j]] > 0 && h[g[i][j]] + 1 == h[i])
{
int a = cost[i][g[i][j]];
if (exces[i] < a) a = exces[i];
exces[i] -= a;
cost[i][g[i][j]] -= a;
exces[g[i][j]] += a;
cost[i][g[i][j]] += a;
ok = 1;
break;
}
if (ok == 1) break;
}
}
if (ok == 1)
continue;
int da = 0;
for(int i=2;i<n;i++)
if (exces[i] > 0)
{
int oki = 0, minim = 1000000000;
for (int j = 0; j < g[i].size(); j++)
{
if (h[g[i][j]] < h[i]) { oki = 1; break; }
if (h[g[i][j]] < minim) minim = h[g[i][j]];
}
if (oki == 0)
{
h[i] = minim + 1;
da = 1;
break;
}
}
if (da == 1)
continue;
return;
}
}
int main()
{
read();
preflux();
cout << exces[n];
return 0;
}