Pagini recente » Cod sursa (job #563391) | Cod sursa (job #1713543) | Cod sursa (job #588720) | Cod sursa (job #1239087) | Cod sursa (job #718974)
Cod sursa(job #718974)
#include<stdio.h>
#include<vector>
#include<cstring>
using namespace std;
FILE*f=fopen("maxflow.in","r");
FILE*g=fopen("maxflow.out","w");
int x,y,z,n,m,sol,minn,c[1001][1001],F[1001][1001],d[5002],t[1001];
vector<int> v[1001];
char viz[1002];
int bfs()
{
int ok=0;
memset(viz,0,sizeof(viz));
int p,u;
p=u=1;
d[1]=1;
viz[1]=1;
while(p<=u)
{
int nod=d[p];
for(int i=0;i<v[nod].size();++i)
if(!viz[v[nod][i]]&&c[nod][v[nod][i]]-F[nod][v[nod][i]]>0)
{
if(v[nod][i]==n)
ok=1;
else
{
t[v[nod][i]]=nod;
d[++u]=v[nod][i];
viz[v[nod][i]]=1;
}
}
++p;
}
return ok;
}
int main()
{
fscanf(f,"%d%d",&n,&m);
for(int i=1;i<=m;++i)
{
fscanf(f,"%d%d%d",&x,&y,&z);
v[x].push_back (y);
v[y].push_back (x);
c[x][y]=z;
}
while(bfs())
for(int i=0;i<v[n].size();++i)
{
minn=c[v[n][i]][n]-F[v[n][i]][n];
for(int nod=v[n][i];nod!=1;nod=t[nod])
if(minn>c[t[nod]][nod]-F[t[nod]][nod])
minn=c[t[nod]][nod]-F[t[nod]][nod];
F[v[n][i]][n]+=minn;
F[n][v[n][i]]-=minn;
for(int nod=v[n][i];nod!=1;nod=t[nod])
{
F[t[nod]][nod]+=minn;
F[nod][t[nod]]-=minn;
}
sol+=minn;
}
fprintf(g,"%d",sol);
fclose(f);
fclose(g);
return 0;
}