Pagini recente » Cod sursa (job #2315610) | Cod sursa (job #1383781) | Cod sursa (job #2521111) | Cod sursa (job #1103355) | Cod sursa (job #2658015)
#include <bits/stdc++.h>
using namespace std;
const int N=1005;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
int rez;
int n,m;
int x,y,c,b,k;
int flow[N][N],C[N][N],q[N],seen[N],a[N],last[N];
vector<int>vecini[N];
bool ok=true;
int main()
{
f>>n>>m;
for(int i=1;i<=m;++i)
{
f>>x>>y>>c;
vecini[x].push_back(y);
vecini[y].push_back(x);
C[x][y]=c;
}
while(ok)
{
ok=false;
for(int i=1;i<=n;++i) seen[i]=0, a[i]=0;
k=1;q[1]=1; b=0; seen[1]=1;
a[1]=1000000;
while(b<k && !seen[n])
{
x=q[++b];
for(auto y : vecini[x]) if(!seen[y] && C[x][y]-flow[x][y]>0)
{
last[y]=x;
a[y]=min(a[x],C[x][y]-flow[x][y]);
q[++k]=y;
seen[y]=1;
}
}
if(seen[n])
{
rez+=a[n];
ok=true;
y=n; x=last[n];
while(y!=1)
{
flow[x][y]+=a[n];
flow[y][x]-=a[n];
y=x;
x=last[x];
}
}
}
g<<rez;
return 0;
}