Pagini recente » Cod sursa (job #56519) | Cod sursa (job #2601154) | Cod sursa (job #80836) | Cod sursa (job #2580759) | Cod sursa (job #2682461)
#include <iostream>
#include <fstream>
#include <queue>
#include <cstring>
std::ifstream in("maxflow.in");
std::ofstream out("maxflow.out");
int n,m,s,d,flux;
const int NMAX = 1005;
const int INF = 1000000007;
int c[NMAX][NMAX],f[NMAX][NMAX],t[NMAX];
int bfs(int source,int dest)
{
int nod,i;
std::queue<int>q;
memset(t,0,sizeof(t));
q.push(source);
t[source] = -1;
while(!q.empty())
{
nod = q.front();
q.pop();
for(i = 1;i <= n;i++)
{
if(!t[i] && c[nod][i] - f[nod][i] > 0)
{
q.push(i);
t[i] = nod;
if(i == dest)
return 1;
}
}
}
return 0;
}
void flux_max()
{
int i,cr;
for(flux = 0;bfs(s,d);flux += cr)
{
cr = INF;
i = d;
while(i != s)
{
cr = std::min(cr,c[t[i]][i]-f[t[i]][i]);
i = t[i];
}
i = d;
while(i != s)
{
f[t[i]][i] += cr;
f[i][t[i]] -= cr;
i = t[i];
}
}
}
int main()
{
int x,y,z;
in>>n>>m;
s = 1;
d = n;
for(int i = 1;i <= m;i++)
{
in>>x>>y>>z;
c[x][y] = z;
}
flux_max();
out<<flux;
return 0;
}