Pagini recente » Cod sursa (job #2067504) | Cod sursa (job #3265244) | Cod sursa (job #1676646) | Cod sursa (job #526060) | Cod sursa (job #2840391)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
const int MAX=1005;
const int INF=1e9;
int n,m,a,b,c,t[MAX],viz[MAX],flux,fmax,cap[MAX][MAX],fl[MAX][MAX],nod;
bool ok;
vector < int > v[MAX];
bool BFS()
{
queue < int > q;
for(int i=1;i<=n;i++)
viz[i]=t[i]=0;
q.push(1);
viz[1]=1;
ok=0;
while(!q.empty() && !ok)
{
nod=q.front();
q.pop();
for(auto vec : v[nod])
if(!viz[vec] && cap[nod][vec]-fl[nod][vec]>0)
{
viz[vec]=1;
q.push(vec);
t[vec]=nod;
if(vec==n)
return 1;
}
}
return 0;
}
int main()
{
fin >> n >> m;
while(m--)
{
fin >> a >> b >> c;
v[a].push_back(b);
v[b].push_back(a);
cap[a][b]=c;
}
while(BFS())
{
flux=INF;
nod=n;
while(nod!=1)
{
if(cap[t[nod]][nod]-fl[t[nod]][nod]<flux)
flux=cap[t[nod]][nod]-fl[t[nod]][nod];
nod=t[nod];
}
nod=n;
while(nod!=1)
{
fl[nod][t[nod]]-=flux;
fl[t[nod]][nod]+=flux;
nod=t[nod];
}
fmax+=flux;
}
fout << fmax;
return 0;
}