Pagini recente » Cod sursa (job #3270088) | Cod sursa (job #2576105) | Cod sursa (job #3198509) | Cod sursa (job #2135415) | Cod sursa (job #2807227)
#include <bits/stdc++.h>
using namespace std;
ifstream in("maxflow.in");
ofstream out("maxflow.out");
int n,m,x[5010],y[5010],c[1010][1010],f[1010][1010],z,ant[1010],r;
vector<vector<int>>a;
bool v[1010];
bool drum()
{
for(int i=2;i<=n;++i)
v[i]=false;
v[1]=true;
queue<int>q;
q.push(1);
while(!q.empty())
{
int x=q.front();
q.pop();
if(x==n)
continue;
for(auto t:a[x])
{
if(v[t]==true||c[x][t]==f[x][t])
continue;
q.push(t);
ant[t]=x;
v[t]=true;
}
}
return v[n];
}
int umplere()
{
int fmin;
while(drum())
{
for(auto x:a[n])
{
ant[n]=x;
if(v[x]==false||f[x][n]==c[x][n])
continue;
fmin=1000000010;
for(int t=n;t!=1;t=ant[t])
fmin=min(fmin,c[ant[t]][t]-f[ant[t]][t]);
if(fmin==0)
continue;
for(int t=n;t!=1;t=ant[t])
{
f[ant[t]][t]+=fmin;
f[t][ant[t]]-=fmin;
}
r+=fmin;
}
}
return r;
}
int main()
{
in>>n>>m;
a.resize(n+5);
for(int i=1;i<=m;++i)
{
in>>x[i]>>y[i]>>z;
c[x[i]][y[i]]+=z;
a[x[i]].push_back(y[i]);
a[y[i]].push_back(x[i]);
}
out<<umplere();
return 0;
}