Pagini recente » Cod sursa (job #2317715) | Cod sursa (job #1110272) | Cod sursa (job #406826) | Cod sursa (job #563511) | Cod sursa (job #954935)
Cod sursa(job #954935)
#include<cstdio>
#include<vector>
using namespace std;
int N,M;
//vector<int> nr[1010];
int nr[1010][1010],size[1010];
int F[1010][1010],C[1010][1010],tata[1010];
int Q[2000];
int BF()
{
int i;
for(i=0;i<=N;++i)
tata[i]=0;
int p,u,x;
Q[0]=1;
tata[1]=-1;
p=u=0;
while(p<=u){
x=Q[p++];
if(x==N)
continue;
for(i=0;i<size[x];++i)
{
if(!tata[nr[x][i]] && F[x][nr[x][i]]<C[x][nr[x][i]]){
Q[++u]=nr[x][i];
tata[nr[x][i]]=x;
}
}
}
return tata[N];
}
void solve(){
while(BF()){
for(size_t i=0;i<size[N];++i){
int nod=nr[N][i];
if(!tata[nod] || F[nod][N]==C[nod][N])
continue;
tata[N]=nod;
int cur=N,max=1000000000;
while(tata[cur]!=-1){
if(C[tata[cur]][cur]-F[tata[cur]][cur]<max)
max=C[tata[cur]][cur]-F[tata[cur]][cur];
cur=tata[cur];
}
if(max==1000000000 || !max)
continue;
cur=N;
while(tata[cur]!=-1){
F[tata[cur]][cur]+=max;
F[cur][tata[cur]]-=max;
cur=tata[cur];
}
}
}
}
int main(){
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
int i,x,y,c;
scanf("%d%d",&N,&M);
for(i=0;i<M;++i){
scanf("%d%d%d",&x,&y,&c);
C[x][y]=c;
nr[x][size[x]]=y; size[x]++;
nr[y][size[y]]=x; size[y]++;
}
solve();
x=0;
for(i=1;i<N;++i)
x+=F[i][N];
printf("%d\n",x);
fclose(stdin);
fclose(stdout);
return 0;
}