Pagini recente » Cod sursa (job #1098976) | Cod sursa (job #1777092) | Cod sursa (job #2108900) | Cod sursa (job #1769239) | Cod sursa (job #1922714)
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
vector<int>a[10002],cd;
int mn,n,t[10002],nod,x,y,z,i,m,c[1002][1002],f[1002][1002];
bool sel[1002];
bool bf()
{
int i,nod;
vector<int>::iterator j;
cd.push_back(1);
memset(sel,false,sizeof(sel));
sel[1]=true;
for(i=0;i<cd.size();i++)
{
nod=cd[i];
if(nod==n)
{
continue;
}
for(j=a[nod].begin();j!=a[nod].end();j++)
{
if(sel[*j]||c[nod][*j]==f[nod][*j])
{
continue;
}
cd.push_back(*j);
sel[*j]=nod;
t[*j]=nod;
}
}
cd.clear();
return sel[n];
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&n,&m);
int ans=0;
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
a[x].push_back(y);
a[y].push_back(x);
c[x][y]+=z;
}
while(bf())
{
for(vector<int>::iterator it=a[n].begin();it!=a[n].end();it++)
{
nod=*it;
if(f[nod][n]==c[nod][n]||!sel[nod])
{
continue;
}
t[n]=nod;
mn=2136732;
for(nod=n;nod!=1;nod=t[nod])
{
if(c[t[nod]][nod]-f[t[nod]][nod]<mn)
{
mn=c[t[nod]][nod]-f[t[nod]][nod];
}
}
ans+=mn;
if(nod!=0)
{
for(nod=n;nod!=1;nod=t[nod])
{
f[t[nod]][nod]+=mn;
f[nod][t[nod]]-=mn;
}
}
}
}
printf("%d\n",ans);
return 0;
}