Pagini recente » Cod sursa (job #3286675) | Cod sursa (job #2472451) | Cod sursa (job #22143) | Cod sursa (job #1732834) | Cod sursa (job #302446)
Cod sursa(job #302446)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
int n,m;
int c[102][102],f[102][102];
int viz[1050];
int parcurgere(){
queue<int> q;
int v;
for (int i=1;i<=n;i++)
viz[i]=0;
q.push(1); viz[1]=-1;
while (!q.empty()) {
v=q.front();
q.pop();
for (int i=1;i<=n;i++)
if (c[v][i]>f[v][i] && viz[i]==0){
viz[i]=v;
q.push(i);
}
}
if (viz[n]!=0)
return 1;
else
return 0;
}
void citire() {
int x,y,w;
ifstream fin("maxflow.in");
fin>>n>>m;
for (int i=0;i<m;i++){
fin>>x>>y>>w;
c[x][y]+=w;
}
for (int i=1;i<=n;i++)
for (int j=i;j<=n;j++)
f[i][j]=f[j][i]=0;
}
int main(void) {
int min,x,y,v;
citire();
while (parcurgere()) {
x=viz[n]; y=n;
min=c[x][y]-f[x][y];
while (x!=1) {
y=x;
x=viz[y];
v=c[x][y]-f[x][y];
if (v<min)
min=v;
}
x=viz[n]; y=n;
f[x][y]+=min;
while (x!=1) {
y=x;
x=viz[y];
f[x][y]+=min;
}
}
v=0;
for (x=1;x<=n;x++)
v+=(f[1][x]-f[x][1]);
ofstream g("maxflow.out");
g<<v;
g.close();
return 0;
}