Pagini recente » Poze preONI 2007 - evaluare | Statistici Andra Tilich (greenkid) | Cod sursa (job #2021972) | Cod sursa (job #2894869) | Cod sursa (job #1038837)
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
const int INF = 0x3f3f3f3f;
int N,M,maxflow;
int C[1005][1005];
int Q[1005],from[1005];
bool viz[1005];
vector<int> V[1005];
bool bfs(){
int ic=1,vc=1,prec,i;
bool found=0;
Q[ic]=1;
memset(viz,0,sizeof(viz));
viz[1]=1;
from[1]=-1;
while(ic<=vc && !found)
{
prec=Q[ic++];
for(i=0;i<V[prec].size();++i)
if(C[prec][V[prec][i]] > 0 && !viz[V[prec][i]])
{
Q[++vc]=V[prec][i];
viz[V[prec][i]]=1;
from[V[prec][i]]=prec;
if(V[prec][i] == N) found=1;
}
}
if(!found) return 0;
int vf=N, mn=INF, prev;
while(from[vf]!=-1)
{
prev=from[vf];
if(C[prev][vf] < mn) mn=C[prev][vf];
vf=prev;
}
vf=N;
while(from[vf]!=-1)
{
prev=from[vf];
C[prev][vf]-=mn;
C[vf][prev]+=mn;
vf=prev;
}
if(mn!=INF){ maxflow += mn; return 1; }
else return 0;
}
int main(){
ifstream cin("maxflow.in");
ofstream cout("maxflow.out");
int i,x,y,c;
cin>>N>>M;
for(i=1;i<=M;++i)
{
cin>>x>>y>>c;
V[x].push_back(y);
V[y].push_back(x);
C[x][y]=c;
}
while(bfs()) ;
cout<<maxflow;
return 0;
}