Pagini recente » Cod sursa (job #520894) | Cod sursa (job #455920) | Cod sursa (job #247699) | Cod sursa (job #97147) | Cod sursa (job #2112475)
#include <fstream>
#include <vector>
#include <queue>
#include <string.h>
#define INF 1000000000
using namespace std;
ifstream fi("maxflow.in");
ofstream g("maxflow.out");
queue <int> q;
vector <int> v[1001];
int c[1001][1001],f[1001][1001],t[1001],viz[1001];
void BFS(int i)
{
int nod,vec;
t[i]=-1;
viz[i]=1;
q.push(i);
while(!q.empty())
{
nod=q.front();
q.pop();
for(i=0;i<v[nod].size();i++)
{
vec=v[nod][i];
if(viz[vec]==0 && c[nod][vec]-f[nod][vec]>0)
{
t[vec]=nod;
viz[vec]=1;
q.push(vec);
}
}
}
}
int main()
{
int rez=0,n,m,i,x,y,flux;
fi>>n>>m;
for(i=1;i<=m;i++)
{
fi>>x>>y>>flux;
c[x][y]+=flux;
v[x].push_back(y);
v[y].push_back(x);
}
while(1)
{
memset(viz,0,sizeof(viz));
memset(t,0,sizeof(t));
BFS(1);
if(t[n]==0)
break;
while(t[n]!=0)
{
flux=INF;
x=n;
while(x!=1)
{
flux=min(c[t[x]][x]-f[t[x]][x],flux);
x=t[x];
}
x=n;
rez+=flux;
while(x!=1)
{
f[t[x]][x]+=flux;
f[x][t[x]]-=flux;
x=t[x];
}
viz[t[n]]=-1;
t[n]=0;
for(i=0;i<v[n].size();i++)
if(viz[v[n][i]]!=-1)
{
t[n]=v[n][i];
break;
}
}
}
g<<rez;
return 0;
}