Pagini recente » Cod sursa (job #2935718) | Cod sursa (job #2296699) | Cod sursa (job #1907111) | Cod sursa (job #2103959) | Cod sursa (job #1650729)
#include <cstdio>
#include <vector>
#include <bitset>
#include <queue>
#define nmax 1010
#define inf 0x7fffffff
using namespace std;
int n,m1;
vector<int> m[nmax];
bitset<nmax> viz;
int f[nmax][nmax],c[nmax][nmax],prec[nmax];
queue<int> q;
int bfs()
{
viz.reset();
vector<int>::iterator it;
int nod;
q.push(1); viz[1]=1;
while(!q.empty())
{
nod=q.front(); q.pop();
for(it=m[nod].begin();it!=m[nod].end();it++)
if(!viz[*it] && f[nod][*it]<c[nod][*it])
{
viz[*it]=1;
prec[*it]=nod;
q.push(*it);
}
}
return viz[n];
}
int main()
{
int i,n1,n2,fl,poz;
int maxflow=inf,flow=0;
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&n,&m1);
for(;m1;m1--)
{
scanf("%d%d%d",&n1,&n2,&fl);
m[n1].push_back(n2);
m[n2].push_back(n1);
c[n1][n2]=fl;
}
n1=0;
while(bfs())
for(i=0;i<m[n].size();i++)
{
prec[n]=m[n][i];
poz=n;
maxflow=inf;
while(poz!=1)
{
maxflow=min(maxflow,c[prec[poz]][poz]-f[prec[poz]][poz]);
poz=prec[poz];
}
poz=n;
while(poz!=1)
{
f[prec[poz]][poz]+=maxflow;
f[poz][prec[poz]]-=maxflow;
poz=prec[poz];
}
flow+=maxflow;
}
printf("%d\n",flow);
fclose(stdin);
fclose(stdout);
return 0;
}