Pagini recente » Cod sursa (job #2785322) | Cod sursa (job #2551157) | Cod sursa (job #1563081) | Cod sursa (job #583215) | Cod sursa (job #2693823)
#include <vector>
#include <queue>
#include <fstream>
#include <cstring>
#define nmx 1005
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
int n,m,x,y,c,r[nmx][nmx],t[nmx],ap,sol,p[nmx][nmx];
vector <int> v[nmx];
int bf()
{
int nod,i,vc;
queue <int> q;
memset(t,0,sizeof(t));
t[1]=-1;
q.push(1);
while(!q.empty())
{
nod=q.front();
if(nod==n) return 1;
q.pop();
for(i=0;i<v[nod].size();i++)
{
vc=v[nod][i];
if(!t[vc] && p[nod][vc]!=r[nod][vc])
{
t[vc]=nod;
q.push(vc);
}
}
}
return 0;
}
void algoritm_fortza()
{
int i,j,vc;
while(bf())
{
for(i=0;i<v[n].size();i++)
{
vc=v[n][i];
if(t[vc] && p[vc][n]!=r[vc][n])
{
ap=p[vc][n]-r[vc][n];
for(j=vc;j>1;j=t[j])
ap=min(ap,p[t[j]][j]-r[t[j]][j]);
if(ap)
{
r[vc][n]+=ap;
r[n][vc]-=ap;
for(j=vc;j>1;j=t[j])
{
r[t[j]][j]+=ap;
r[j][t[j]]-=ap;
}
sol+=ap;
}
}
}
}
}
int main()
{
int i;
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y>>c;
v[x].push_back(y);
v[y].push_back(x);
p[x][y]=c;
}
algoritm_fortza();
g<<sol;
return 0;
}