Pagini recente » Cod sursa (job #2125137) | Cod sursa (job #466099) | Cod sursa (job #328703) | Cod sursa (job #122174) | Cod sursa (job #3224820)
#include <bits/stdc++.h>
#define MAX 1005
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
vector<int>vec[MAX];
int cap[MAX][MAX];
int flux[MAX][MAX];
bool viz[MAX];
int parc[MAX];
int tata[MAX];
int n,m;
bool bfs()
{
int i;
for(i=1;i<=n;++i)
viz[i]=0;
viz[1]=1;
parc[0]=1;
parc[1]=1;
for(i=1;i<=parc[0];++i)
{
int crt=parc[i];
int j;
int sz=vec[crt].size();
for(j=0;j<sz;++j)
if(!viz[vec[crt][j]] && flux[crt][vec[crt][j]]<cap[crt][vec[crt][j]])
{
viz[vec[crt][j]]=1;
parc[++parc[0]]=vec[crt][j];
tata[vec[crt][j]]=crt;
if(vec[crt][j]==n)
return 1;
}
}
return 0;
}
int main()
{
fin>>n>>m;
while(m--)
{
int x,y,z;
fin>>x>>y>>z;
cap[x][y]+=z;
vec[x].push_back(y);
vec[y].push_back(x);
}
int rasp=0;
while(bfs())
{
int nod=n;
int minn=1e9;
while(nod>1)
{
minn=min(minn,cap[tata[nod]][nod]-flux[tata[nod]][nod]);
nod=tata[nod];
}
nod=n;
while(nod>1)
{
flux[tata[nod]][nod]+=minn;
flux[nod][tata[nod]]-=minn;
nod=tata[nod];
}
rasp+=minn;
}
fout<<rasp;
return 0;
}