Pagini recente » Cod sursa (job #1712024) | Cod sursa (job #3199405) | Cod sursa (job #405496) | Cod sursa (job #3263419) | Cod sursa (job #1467790)
#include <fstream>
#include <cstring>
#define Max 1000000000
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
struct coada{
int nod,cost,come;
}co[55000];
int qw[1010][1010];
int maxx[1010][1010];
int viz[5010];
int in,s,sf,nod,cost,i,n,m,j,x,y,c;
void _think(int last)
{
int cost= co[last].cost;
while(co[last].come!=0)
{
int prev=co[last].come;
qw[co[prev].nod][co[last].nod]+=cost;
qw[co[last].nod][co[prev].nod]-=cost;
last=prev;
}
}
bool bfs()
{
in=1;
sf=0;
co[++sf].nod=1;
co[sf].come=0;
co[sf].cost=Max;
memset(viz,0,sizeof(viz));
while(in<=sf)
{
nod=co[in].nod;
cost=co[in].cost;
for(i=1;i<=n;i++)
{
if(qw[nod][i]<maxx[nod][i] && viz[i]==0)
{
viz[i]==i;
co[++sf].nod=i;
co[sf].come=in;
co[sf].cost= cost < (maxx[nod][i]-qw[nod][i]) ? cost : (maxx[nod][i]-qw[nod][i]);
if(i==n)
{
s+=co[sf].cost;
_think(sf);
return true;
}
}
}
in++;
}
return false;
}
int main()
{
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y>>c;
maxx[x][y]=c;
}
while(bfs());
fout<<s;
return 0;
}