Pagini recente » Cod sursa (job #2182003) | Cod sursa (job #2811439) | Cod sursa (job #2129008) | Cod sursa (job #2765340) | Cod sursa (job #626040)
Cod sursa(job #626040)
#include<fstream>
#include<queue>
#define N 1001
using namespace std;
ifstream in("maxflow.in");
ofstream out("maxflow.out");
int n,m,x[N][N],maxflow,p[N];
int bf() {
queue<int> q;
bool ver[N];
int i;
for(i=1;i<=n;++i)
ver[i]=false;
q.push(1);
while(!q.empty()) {
for(i=1;i<=n;++i) if(!ver[i] && x[q.front()][i]>0) {
ver[i]=true;
p[i]=q.front();
if(i==n)
return 1;
q.push(i);
}
q.pop();
}
return 0;
}
bool drum() {
int t,smin=1<<22;
if(bf()==0)
return false;
t=n;
while(t!=1) {
if(x[p[t]][t]<smin)
smin=x[p[t]][t];
t=p[t];
}
t=n;
while(t!=1) {
x[p[t]][t]-=smin;
x[t][p[t]]+=smin;
t=p[t];
}
maxflow+=smin;
return true;
}
int main() {
int i,j,a,b,c;
in >> n >> m;
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
x[i][j]=-1;
for(i=1;i<=m;++i) {
in >> a >> b >> c;
if(x[a][b]==-1)
x[a][b]=0;
if(x[b][a]==-1)
x[b][a]=0;
x[a][b]+=c;
}
while(drum());
out << maxflow;
return 0;
}