Pagini recente » Cod sursa (job #2415517) | Cod sursa (job #961817) | Cod sursa (job #129589) | Cod sursa (job #543432) | Cod sursa (job #2418019)
#include<fstream>
#include<queue>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
queue<int> q;
vector<int> v[1010];
int c[1010][1010],t[1010],i,a,b,n,m,cap,d[1010],f[1010][1010],mini,sol;
int const inf=1000000000;
int bfs()
{
for(int i=1;i<=n;i++) d[i]=0;
int nod;
q.push(1);d[1]=1;
while(!q.empty())
{
nod=q.front();q.pop();
for(auto ve:v[nod])
if(d[ve]==0&&f[nod][ve]<c[nod][ve])
{
t[ve]=nod;
d[ve]=1;
q.push(ve);
}
}
return d[n];
}
int main()
{
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>a>>b>>cap;
v[a].push_back(b);
v[b].push_back(a);
c[a][b]=cap;
}
while(bfs())
{
for(auto nod:v[n])if(d[nod]&&c[nod][n]>f[nod][n])
{
b=n;a=nod;mini=inf;
while(a!=0)
{
mini=min(c[a][b]-f[a][b],mini);
b=a;a=t[a];
}
b=n;a=nod;
while(a!=0)
{
f[a][b]+=mini;f[b][a]-=mini;
b=a;a=t[a];
}
f[n][nod]+=mini;
sol+=mini;
}
}
fout<<sol;
return 0;
}