Pagini recente » Cod sursa (job #950492) | Cod sursa (job #2988560) | Cod sursa (job #58462) | Cod sursa (job #1029622) | Cod sursa (job #2347538)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int i,j,a,b,n,m,x,y,z;
struct lat
{
int f;
int c;
}g[1004][1004];
struct pct
{
int h,ex;
}p[1004];
int exces()
{
for (i=2;i<n;i++)
if (p[i].ex) return i;
return -1;
}
bool push(int u)
{
for (i=1;i<=n;i++)
if (g[u][i].c)
{
if (g[u][i].c==g[u][i].f) continue;
if (p[u].h>p[i].h)
{
int flux=min(g[u][i].c-g[u][i].f,p[u].ex);
p[i].ex+=flux;
p[u].ex-=flux;
g[u][i].f+=flux;
g[i][u].c+=flux;
return 1;
}
}
return false;
}
void relable(int u)
{
int m=100000000;
for (i=1;i<=n;i++)
if (g[u][i].c>g[u][i].f)
if (p[i].h<m) m=p[i].h;
p[u].h=m+1;
}
int main()
{
fin>>n>>m;
for (i=1;i<=m;i++)
{
fin>>x>>y>>z;
g[x][y].c=z;
if (x==1)
{
g[x][y].f=g[x][y].c;
p[y].ex=g[x][y].f;
g[y][x].c=g[x][y].c;
}
}
p[1].h=n;
int u=exces();
while (u!=-1)
{
if (!push(u))
relable(u);
u=exces();
}
fout<<p[n].ex;
return 0;
}
/*struct lat
{
int fl,cp,a,b;
lat(int fl,int cp,int a,int b)
{
this->fl=fl;
this->cp=cp;
this->a=a;
this->b=b;
}
};
struct pc
{
int h;
int ex;
pc(int h,int ex)
{
this->ex=ex;
this->h=h;
}
};*/