Pagini recente » Cod sursa (job #2326345) | Cod sursa (job #2894336) | Cod sursa (job #2834225) | Cod sursa (job #250233) | Cod sursa (job #629306)
Cod sursa(job #629306)
#include<fstream>
#include<queue>
#include<vector>
#define N 1001
using namespace std;
ifstream in("maxflow.in");
ofstream out("maxflow.out");
int n,m,x[N][N],p[N],flux[N][N];
vector<int> g[N];
bool bf() {
queue<int> q;
bool ver[N];
int i;
for(i=1;i<=n;++i) {
ver[i]=false;
p[i]=0;
}
q.push(1);
while(!q.empty()) {
for(i=0;i!=g[q.front()].size();++i) if(!ver[g[q.front()][i]] && x[q.front()][g[q.front()][i]]-flux[q.front()][g[q.front()][i]]>0) {
ver[g[q.front()][i]]=true;
p[g[q.front()][i]]=q.front();
q.push(g[q.front()][i]);
}
q.pop();
}
if(p[n])
return true;
return false;
}
int dinic() {
int smin,maxflow=0,j,i;
while(bf()) {
for(j=1;j!=n;++j) if(x[j][n] - flux[j][n]>0) {
smin=1<<22;
if(x[j][n] - flux[j][n]<smin)
smin=x[j][n] - flux[j][n];
for(i=j;i!=1;i=p[i])
if(x[p[i]][i] - flux[p[i]][i]<smin)
smin=x[p[i]][i] - flux[p[i]][i];
flux[j][n]+=smin;
flux[n][j]-=smin;
for(i=j;i!=1;i=p[i]) {
flux[p[i]][i]+=smin;
flux[i][p[i]]-=smin;
}
maxflow+=smin;
}
}
return maxflow;
}
int main() {
int i,j,a,b,c;
in >> n >> m;
for(i=1;i<=m;++i) {
in >> a >> b >> c;
x[a][b]+=c;
g[a].push_back(b);
g[b].push_back(a);
}
out << dinic();
return 0;
}