Pagini recente » Cod sursa (job #1497100) | Cod sursa (job #2193387) | Cod sursa (job #1229488) | Cod sursa (job #1273863) | Cod sursa (job #805414)
Cod sursa(job #805414)
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
int nod,j,fmin,flow,i,n,m,x1,y1,co,q[1004],t[1004],viz[1004],c[1004][1004],f[1004][1004];
vector < int > h[1003];
int min(int a,int b)
{
if(a<b) return a;
return b;
}
int bfs()
{
int i,j,nod;
memset(viz,0,sizeof(viz));
viz[1]=1;
q[0]=q[1]=1;
for(i=1;i<=q[0];i++)
if(q[i]!=n)
{
for(j=0;j<h[q[i]].size();j++)
{
nod=h[q[i]][j];
if(viz[nod]==0&&f[q[i]][nod]<c[q[i]][nod])
{
q[0]++;
q[q[0]]=nod;
viz[nod]=1;
t[nod]=q[i];
if(nod==n) return 1;
}
}
}
return viz[n];
//return 0;
}
int main()
{
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",&x1,&y1,&co);
h[x1].push_back(y1);
h[y1].push_back(x1);
c[x1][y1]+=co;
}
for(flow=0;bfs();)
for(j=0;j<h[n].size();j++)
{
nod=h[n][j];
if(f[nod][n]<c[nod][n]&&viz[nod]==1)
{
t[n]=nod;
fmin=(1<<30);
for(i=n;i!=1;i=t[i])
fmin=min(fmin,c[t[i]][i]-f[t[i]][i]);
if(fmin!=0)
{
for(i=n;i!=1;i=t[i])
{
f[t[i]][i]+=fmin;
f[i][t[i]]-=fmin;
}
}
flow=flow+fmin;
}
}
printf("%d\n",flow);
return 0;
}