Pagini recente » Cod sursa (job #1101892) | Cod sursa (job #2640726) | Cod sursa (job #3281907) | Cod sursa (job #1351024) | Cod sursa (job #612396)
Cod sursa(job #612396)
#include<cstdio>
#include<vector>
#define oo 99999999
#define minim(a,b) a<b?a:b
using namespace std;
vector<int>V[1010];
void read(),solve();
int C[1010][1010],a,b,c,i,n,m,flux,F[1010][1010],viz[1010],cd[1010],dad[1010],fmin,curr,BFS();
int main()
{
read();
solve();
return 0;
}
void read()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d %d",&n,&m);
for(;m;--m)
{
scanf("%d%d%d",&a,&b,&c);
C[a][b]+=c;
V[a].push_back(b);
V[b].push_back(a);
}
}
void solve()
{
for(;BFS();)
for(vector<int>::iterator it=V[n].begin();it!=V[n].end();it++)
{
if(F[*it][n]==C[*it][n]||!viz[*it])continue;
fmin=oo;
dad[n]=*it;
for(curr=n;curr!=1;curr=dad[curr])fmin=minim(fmin,C[dad[curr]][curr]-F[dad[curr]][curr]);
if(!fmin)continue;
for(curr=n;curr!=1;curr=dad[curr])
{
F[dad[curr]][curr]+=fmin;
F[curr][dad[curr]]-=fmin;
}
flux+=fmin;
}
printf("%d\n",flux);
}
int BFS()
{
cd[0]=1;
cd[1]=1;
memset(viz,0,sizeof(viz));
viz[1]=1;
for(int i=1;i<=cd[0];i++)
{
int curr=cd[i];
if(curr==n)continue;
for(vector<int>::iterator it=V[curr].begin();it!=V[curr].end();it++)
{
if(C[curr][*it]==F[curr][*it]||viz[*it])continue;
viz[*it]=1;
cd[++cd[0]]=*it;
dad[*it]=curr;
}
}
return viz[n];
}