Pagini recente » Profil ΩMΣGΔ | Istoria paginii utilizator/rusu.iura | Profil Cgvn | Cod sursa (job #1519079) | Cod sursa (job #2034755)
#include <bits/stdc++.h>
#define Nmax 1001
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
list <int> G[Nmax];
int flow[Nmax][Nmax];
int cap[Nmax][Nmax];
bitset <Nmax> viz;
int t[Nmax];
queue <int> q;
int n;
bool BFS()
{
int x;
list <int> :: iterator it;
q.push(1);
for(x=1;x<=n;x++)
viz[x]=false;
while(!q.empty())
{
x=q.front();
q.pop();
if(x==n) continue;
for(it=G[x].begin();it!=G[x].end();it++)
if(!viz[*it] and cap[x][*it]!=flow[x][*it])
{
viz[*it]=true;
q.push(*it);
t[*it]=x;
}
}
return viz[n];
}
int main()
{
int m,i,j,cost,k;
f>>n>>m;
for(k=1;k<=m;k++)
{
f>>i>>j>>cost;
G[i].push_back(j);
G[j].push_back(i);
cap[i][j]=cost;
}
int ans=0,minn,x;
list <int> :: iterator it;
while(BFS())
for(it=G[n].begin();it!=G[n].end();it++)
if(viz[*it] and flow[*it][n]!=cap[*it][n])
{
t[n]=*it;
minn=INT_MAX;
x=n;
while(x!=1)
{
if(cap[t[x]][x]-flow[t[x]][x]<minn)
minn=cap[t[x]][x]-flow[t[x]][x];
x=t[x];
}
if(minn)
{
x=n;
while(x!=1)
{
flow[t[x]][x]+=minn;
flow[x][t[x]]-=minn;
x=t[x];
}
}
ans+=minn;
}
g<<ans;
return 0;
}