Pagini recente » Cod sursa (job #677393) | Cod sursa (job #1637310) | Cod sursa (job #1962014) | Cod sursa (job #2577587) | Cod sursa (job #1418490)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
const int NMAX=1005;
int n,m,sol,ad[NMAX][NMAX],fl[NMAX][NMAX],f[NMAX],st[NMAX];
vector<int>v[NMAX];
vector<int>::iterator it;
bitset<NMAX>viz;
inline bool BFS()
{
int i,x,len;
for (i=1;i<=n;i++) viz[i]=f[i]=0;
len=st[1]=1;
viz[1]=1;
for (i=1;i<=len;i++)
{
x=st[i];
for (it=v[x].begin();it!=v[x].end();it++)
{
if (ad[x][*it]==fl[x][*it] || viz[*it]==1) continue;
viz[*it]=1;
f[*it]=x;
st[++len]=*it;
}
}
if (f[n]==0) return 0;
return 1;
}
int main()
{
int i,j,x,y,z,mn;
fin>>n>>m;
for (i=1;i<=m;i++)
{
fin>>x>>y>>z;
fl[x][y]=z;
v[x].push_back(y);
v[y].push_back(x);
}
for (sol=0;BFS();)
for (j=0;j<v[n].size();j++)
{
x=v[n][j];
if (fl[x][n]==ad[x][n] || !viz[x]) continue;
f[n]=x;
mn=1<<30;
for (i=n;i>1;i=f[i])
mn=min(mn,fl[f[i]][i]-ad[f[i]][i]);
for (i=n;i>1;i=f[i])
{
ad[f[i]][i]+=mn;
ad[i][f[i]]-=mn;
}
sol+=mn;
}
fout<<sol<<"\n";
return 0;
}