Pagini recente » Cod sursa (job #2613928) | Cod sursa (job #2131977) | Cod sursa (job #512523) | Cod sursa (job #877160) | Cod sursa (job #2129910)
#include<fstream>
#include<vector>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n,m,i,j,o,minim,sol,q,x,y,k;
int D[1005],t[1005];
int c[1005][1005],f[1005][1005];
vector<int>L[1005];
void dfs(int nod){
D[nod]=1;
for(int i=0;i<L[nod].size();i++){
int fiu=L[nod][i];
if(D[fiu]==0 && c[nod][fiu]>f[nod][fiu]){
t[fiu]=nod;
dfs(fiu);
}
}
}
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;
while(D[n]==1){
for(o=1;o<=n;o++){
D[o]=0;
t[o]=0;
}
dfs(1);
if(D[n]==1){
q=n;
minim=200005;
while(q!=1){
minim=min(minim,c[t[q]][q]-f[t[q]][q]);
q=t[q];
}
sol+=minim;
q=n;
while(q!=1){
f[t[q]][q]+=minim;
f[q][t[q]]-=minim;
q=t[q];
}
}
}
fout<<sol;
return 0;
}