Pagini recente » Cod sursa (job #1607413) | Cod sursa (job #1515680) | Cod sursa (job #1402366) | Cod sursa (job #1269563) | Cod sursa (job #626048)
Cod sursa(job #626048)
#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],maxflow,p[N];
vector<int> g[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=0;i!=g[q.front()].size();++i) if(!ver[g[q.front()][i]] && x[q.front()][g[q.front()][i]]>0) {
ver[g[q.front()][i]]=true;
p[g[q.front()][i]]=q.front();
if(g[q.front()][i]==n)
return 1;
q.push(g[q.front()][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<=m;++i) {
in >> a >> b >> c;
x[a][b]+=c;
g[a].push_back(b);
g[b].push_back(a);
}
while(drum());
out << maxflow;
return 0;
}