Pagini recente » Cod sursa (job #2804871) | Cod sursa (job #2230202) | Cod sursa (job #505050) | Cod sursa (job #1666878) | Cod sursa (job #274604)
Cod sursa(job #274604)
#include<stdio.h>
#include<vector>
#include<string>
using namespace std;
FILE*fin=fopen("maxflow.in","r");
FILE*fout=fopen("maxflow.out","w");
#define nm 1005
#define inf 0x3f3f3f3f
#define pb push_back
vector<int> g[nm];
int n,m,viz[nm],q[nm],c[nm][nm],f[nm][nm],t[nm];
inline int bf()
{
int i,j,nod,nnod;
q[0]=1;q[1]=1;i=1;
for(j=1;j<=n;j++)
viz[j]=0;
while(i<=q[0])
{
nod=q[i];
for(j=0;j<g[nod].size();j++)
{
nnod=g[nod][j];
if((c[nod][nnod]-f[nod][nnod])&&!viz[nnod])
{
viz[nnod]=1;
q[0]++;
q[q[0]]=nnod;
t[nnod]=nod;
if(nnod==n) return 1;
}
}
i++;
}
return 0;
}
int main()
{
int i,x,y,z,flow,nod,fmin;
fscanf(fin,"%d%d",&n,&m);
for(i=1;i<=m;i++)
{
fscanf(fin,"%d%d%d",&x,&y,&z);
c[x][y]=z;
g[x].pb(y);
g[y].pb(x);
}
flow=0;
while(bf())
{
fmin=inf;
nod=n;
while(nod!=1)
{
fmin=min(fmin,c[t[nod]][nod]-f[t[nod]][nod]);
nod=t[nod];
}
nod=n;
while(nod!=1)
{
f[t[nod]][nod]+=fmin;
f[nod][t[nod]]-=fmin;
nod=t[nod];
}
flow+=fmin;
}
fprintf(fout,"%d",flow);
fclose(fin);
fclose(fout);
return 0;
}