Pagini recente » Cod sursa (job #2100518) | Cod sursa (job #1697264) | Cod sursa (job #963190) | Istoria paginii runda/runda12 | Cod sursa (job #1038849)
#include<fstream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef struct lnod{
int vf;
lnod *next;
}*Nod;
const int INF = 0x3f3f3f3f;
int N,M,maxflow;
int C[1005][1005];
int Q[1005],from[1005];
bool viz[1005];
Nod V[1005];
inline void add(int x,int y){
Nod p = new lnod;
p->vf=y;
p->next=V[x];
V[x]=p;
}
void update(){
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;
}
bool bfs(){
int ic=1,vc=1,prec;
bool ok=0;
Q[ic]=1;
memset(viz,0,sizeof(viz));
viz[1]=1;
from[1]=-1;
while(ic<=vc)
{
prec=Q[ic++];
for(Nod p=V[prec];p;p=p->next)
if(C[prec][p->vf] > 0 && !viz[p->vf])
{
if(p->vf != N) Q[++vc]=p->vf;
viz[p->vf]=1;
from[p->vf]=prec;
}
if(viz[N]){ ok=1; update(); viz[N]=0; }
}
return ok;
}
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;
add(x,y);
add(y,x);
C[x][y]=c;
}
while(bfs()) ;
cout<<maxflow;
return 0;
}