Pagini recente » Cod sursa (job #63584) | Cod sursa (job #30828) | Cod sursa (job #2586714) | Cod sursa (job #302156) | Cod sursa (job #2587174)
#include <bits/stdc++.h>
using namespace std;
ifstream in("maxflow.in");
ofstream out("maxflow.out");
const int DIM = 1024;
const int oo = (int) (1e9);
int n, m, f[DIM][DIM], c[DIM][DIM], t[DIM], ca[DIM], st, dr, nod, rez, fmi;
bool viz[DIM];
vector<int> G[DIM];
void read()
{
in>>n>>m;
int x, y, z;
for(int i = 1;i <= m;i++)
{
in>>x>>y>>z;
c[x][y] += z;
G[x].push_back(y);
G[y].push_back(x);
}
in.close();
}
bool bfs()
{
st = dr = 1;
ca[1] = 1;
memset(viz, 0, sizeof(viz));
viz[1] = 1;
while(st <= dr)
{
nod = ca[st++];
if(nod == n)
continue;
for(int i = 0;i < G[nod].size();i++)
{
if(c[nod][G[nod][i]] > f[nod][G[nod][i]] && !viz[G[nod][i]])
{
viz[G[nod][i]] = 1;
ca[++dr] = G[nod][i];
t[G[nod][i]] = nod;
}
}
}
return viz[n];
}
void solve()
{
while(bfs())
{
for(int i = 0;i < G[n].size();i++)
{
nod = G[n][i];
if(c[nod][n] > f[nod][n] && viz[nod])
{
t[n] = nod;
fmi = oo;
for(nod = n;nod != 1;nod = t[nod])
fmi = min(fmi, c[t[nod]][nod] - f[t[nod]][nod]);
if(fmi > 0)
{
for(nod = n;nod != 1;nod = t[nod])
{
f[t[nod]][nod] += fmi;
f[nod][t[nod]] -fmi;
}
rez += fmi;
}
}
}
}
}
void print()
{
out<<rez;
out.close();
}
int main()
{
read();
solve();
print();
return 0;
}