Cod sursa(job #723897)

Utilizator mening12001Andrei Geogescu mening12001 Data 26 martie 2012 00:16:23
Problema Flux maxim Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<iostream>
#include<fstream>
#include<queue>
#define inf 0x3f3f3f3f
using namespace std;
struct muchie{int y,c;};
struct prev{int p1,p2;};
prev p[1000];
bool viz[1000];
int main()
{ifstream f("maxflow.in");
ofstream h("maxflow.out");
int n,m,x,i,xx;
long F=0;
vector< vector <muchie> > v(1000);
queue<int> q;
muchie mm;
f>>n>>m;

for(i=1;i<=m;i++)
{f>>x>>mm.y>>mm.c;
v[x].push_back(mm);
swap(mm.y,x);
mm.c=0;
v[x].push_back(mm);}

while(1!=0)
{for(i=1;i<=n;i++)
	{p[i].p1=0;
p[i].p2=0;
viz[i]=0;}	
q.push(1);
viz[1]=1;
while(!q.empty())
{xx=q.front();
q.pop();
for(i=0;i<v[xx].size();i++)
if(viz[v[xx][i].y]==0&&v[xx][i].c>0)
{p[v[xx][i].y].p1=xx;
p[v[xx][i].y].p2=i;
viz[v[xx][i].y]=1;
q.push(v[xx][i].y);
}}
if(p[n].p1==0)
	break;
i=n;
int min=inf;
while(p[i].p1!=0)
{if(v[p[i].p1][p[i].p2].c<min)
min=v[p[i].p1][p[i].p2].c;
i=p[i].p1;}
i=n;
F=F+min;
while(p[i].p1!=0)
{v[p[i].p1][p[i].p2].c-=min;
v[v[p[i].p1][p[i].p2].y][p[i].p1].c+=min;
i=p[i].p1;}}	

h<<F;
return 0;}