Pagini recente » Cod sursa (job #1136376) | Cod sursa (job #595778) | Cod sursa (job #1074224) | Cod sursa (job #2884515) | Cod sursa (job #2135500)
#include<fstream>
#include<vector>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n,m,i,j,o,minim,sol,q,w,x,y,k;
int D[1005],t[1005],v[1005];
int c[1005][1005],f[1005][1005];
vector<int>L[1005];
void dfs(){
v[1]=1;
D[1]=1;
int p=1;
int u=1;
while(p<=u){
int x=v[p];
for(int i=0;i<L[x].size();i++){
int k=L[x][i];
if(c[x][k]>f[x][k]&&D[k]==0){
u++;
D[k]=1;
t[k]=x;
v[u]=k;
}
}
p++;
}
}
int main(){
fin>>n>>m;
for(i=1;i<=m;i++){
fin>>x>>y>>k;
L[x].push_back(y);
L[y].push_back(x);
c[x][y]=k;
}
D[n]=1;
int ok=0;
while(D[n]==1){
ok++;
for(o=1;o<=n;o++){
D[o]=0;
}
dfs();
if(D[n]==1){
for(i=0;i<L[n].size();i++){
q=L[n][i];
w=L[n][i];
if(c[q][n]>f[q][n]&&D[q]==1){
minim=c[q][n]-f[q][n];
while(q!=1){
minim=min(minim,c[t[q]][q]-f[t[q]][q]);
q=t[q];
}
q=w;
while(q!=1){
f[t[q]][q]+=minim;
f[q][t[q]]-=minim;
q=t[q];
}
f[w][n]+=minim;
sol+=minim;
}
}
}
}
fout<<sol;
return 0;
}