Pagini recente » Cod sursa (job #175335) | Cod sursa (job #2333387) | Cod sursa (job #63401) | Cod sursa (job #2385994) | Cod sursa (job #2329839)
#include <stdio.h>
#include <deque>
#include <iostream>
using namespace std;
FILE *in,*out;
int n,m,nr=1,flux;
int start[1002],used[1002],t[1002],c[1002][1002];
deque <int> deq;
struct graph{
int node,next;
}v[10002];
void read(){
int k=0,x,y,z;
fscanf(in,"%d %d",&n,&m);
for(int i=1;i<=m;i++){
fscanf(in,"%d %d %d",&x,&y,&z);
v[++k].node=y;
v[k].next=start[x];
start[x]=k;
v[++k].node=x;
v[k].next=start[y];
start[y]=k;
c[x][y]=c[y][x]=z;
}
}
int bfs(){
deq.push_back(1);
while(!deq.empty()){
int node=deq.front();
deq.pop_front();
for(int vec=start[node];vec;vec=v[vec].next){
if(used[v[vec].node]<nr && c[node][v[vec].node]>0){
used[v[vec].node]=nr;
t[v[vec].node]=node;
if(v[vec].node!=n)
deq.push_back(v[vec].node);
}
}
}
if(used[n]==nr)
return 1;
return 0;
}
void fluxx(){
for(int k=bfs();k;k=bfs()){
for(int i=start[n];i;i=v[i].next){
if(used[v[i].node]==nr && c[v[i].node][n]>0){
t[n]=v[i].node;
int minn=999999999;
for(int j=n;j!=1;j=t[j])
minn=min(minn,c[t[j]][j]);
for(int j=n;j!=1;j=t[j]){
c[t[j]][j]-=minn;
c[j][t[j]]+=minn;
}
flux+=minn;
}
}
nr++;
}
fprintf(out,"%d",flux);
}
int main(){
in=fopen("maxflow.in","r");
out=fopen("maxflow.out","w");
read();
fluxx();
return 0;
}