Pagini recente » Cod sursa (job #2613709) | Cod sursa (job #1954127) | Cod sursa (job #2331309) | Cod sursa (job #1312200) | Cod sursa (job #2579553)
#include <fstream>
#include <vector>
#include <queue>
#define inf 0x3f3f3f3f
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
int n, m;
int c[1005][1005];
int fl[1005][1005];
vector<int> gr[1005];
queue<int> q;
bool viz[1005];
int t[1005];
void citire()
{
f>>n>>m;
int x, y, cost;
for(int i=1; i<=m; i++)
{
f>>x>>y>>cost;
c[x][y]=cost;
gr[x].push_back(y);
gr[y].push_back(x);
}
}
bool bfs()
{
q.push(1);
for(int i=1; i<=n; i++)
viz[i]=0;
viz[1]=1;
while(!q.empty())
{
int vf=q.front();
q.pop();
if(vf==n)
continue;
for(auto &v:gr[vf])
{
if(c[vf][v]==fl[vf][v] || viz[v]!=0)
continue;
viz[v]=1;
q.push(v);
t[v]=vf;
}
}
return viz[n];
}
int main()
{
citire();
int flux=0, fmin=inf;
while(bfs()!=0)
{
for(auto v:gr[n])
{
if(fl[v][n]==c[v][n] || viz[v]==0)
continue;
t[n]=v;
fmin=inf;
for(int nod=n; nod!=1; nod=t[nod])
fmin=min(fmin, c[t[nod]][nod]-fl[t[nod]][nod]);
if(fmin==0)
continue;
for(int nod=n; nod!=1; nod=t[nod])
{
fl[t[nod]][nod]+=fmin;
fl[nod][t[nod]]-=fmin;
}
flux+=fmin;
}
}
g<<flux;
return 0;
}