Pagini recente » Cod sursa (job #2511592) | Cod sursa (job #1062150) | Cod sursa (job #2184618) | Cod sursa (job #1469798) | Cod sursa (job #1217179)
#include<fstream>
#include<vector>
#include<queue>
#include<cstring>
#define pb push_back
#define mp make_pair
using namespace std;
ifstream cin("maxflow.in");
ofstream cout("maxflow.out");
const int NMAX = 1024, inf = 1000000000;
vector<int> g[NMAX], sol;
queue<int> q;
int C[NMAX][NMAX],F[NMAX][NMAX],P[NMAX],V[NMAX];
int n,m,i,j,k,x,y,z,flow,fmin;
int bfs()
{
int ind=0,i;
queue<int> q1; swap(q,q1);
vector<int> sol1;
swap(sol1,sol);
q.push(1);
memset(V,0,sizeof(V));
V[1]=1;
while (!q.empty())
{
int v=q.front(); q.pop();
if (v==n) continue;
for (i=0;i<g[v].size();i++)
{
int to=g[v][i];
if (!V[to] && F[v][to]<C[v][to])
{
if (F[to][n]<C[to][n])
{
ind=1;
sol.pb(to);
V[to]=1;
P[to]=v;
}
q.push(to);
V[to]=1;
P[to]=v;
}
}
}
return ind;
}
int main()
{
cin>>n>>m;
for (i=1;i<=m;i++)
{
cin>>x>>y>>z;
g[x].pb(y);
g[y].pb(x);
C[x][y]+=z;
}
for (flow=0; bfs();)
{
for (j=0;j<sol.size();j++)
{
int v=sol[j];
fmin=inf;
P[n]=v;
for (k=n;k!=1;k=P[k])
fmin=min(fmin,C[P[k]][k]-F[P[k]][k]);
for (k=n;k!=1;k=P[k])
{
F[P[k]][k]+=fmin;
F[k][P[k]]-=fmin;
}
flow+=fmin;
}
}
cout<<flow;
return 0;
}