Pagini recente » Cod sursa (job #1310583) | Cod sursa (job #512898) | Cod sursa (job #762756) | Cod sursa (job #2271638) | Cod sursa (job #677192)
Cod sursa(job #677192)
#include <cstdio>
#define pb push_back
#include <vector>
#include <cstring>
using namespace std;
vector <int> v[1003];
int t[1003],n,viz[1003],c[1003][1003],f[1003][1003];
int bf()
{
int d[1003],nr=1;
memset(viz,0,sizeof(viz));
d[1]=1;
for (int i=1;i<=nr;++i)
{
int nod=d[i];
for (vector<int>::iterator it=v[nod].begin();it!=v[nod].end();++it)
if ((c[nod][*it]!=f[nod][*it]) && (!viz[*it]))
{t[*it]=nod,viz[*it]=1;
if (*it!=n) d[++nr]=*it;
}
}
return viz[n];
}
int main()
{
int m,fl=0,i,a,b,x;
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d %d",&n,&m);
for (i=1;i<=m;++i)
{
scanf("%d %d %d",&a,&b,&x);
c[a][b]=x;
v[a].pb(b);v[b].pb(a);
}
while (bf())
for (vector <int>::iterator it=v[n].begin();it!=v[n].end();++it)
if (viz[*it])
{
t[n]=*it;int min=200000;
for (int nod=n;nod>1;nod=t[nod])
if (c[t[nod]][nod]-f[t[nod]][nod]<min)
min=c[t[nod]][nod]-f[t[nod]][nod];
fl+=min;
for (int nod=n;nod>1;nod=t[nod])
f[t[nod]][nod]+=min,f[nod][t[nod]]-=min;
}
printf("%d\n",fl);
return 0;
}