Pagini recente » Cod sursa (job #2502895) | Cod sursa (job #260770) | Cod sursa (job #889410) | Cod sursa (job #500590) | Cod sursa (job #2485962)
#include <bits/stdc++.h>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
vector <int> G[1005];
int n,m,x,y,cst,i,F[1005][1005],c[1005][1005],t[1005];
bool bf(int s, int d)
{
for(int i=1;i<=n;i++)
t[i]=-1;
t[s]=0;
queue <int> q;
int x=0;
q.push(s);
while(!q.empty())
{
x=q.front();
q.pop();
for(auto it : G[x])
if(t[it]==-1 && c[x][it]>F[x][it])
{
t[it]=x;
if(it==d)
return true;
q.push(it);
}
}
return false;
}
int Maxflow(int s,int d)
{
int flux=0;
while(bf(s,d))
{
for(auto it : G[d])
if(t[it]!=-1)
{
int Add=c[it][d]-F[it][d];
int nod=it,dad=0;
while(nod!=s)
{
dad=t[nod];
Add=min(Add,c[dad][nod]-F[dad][nod]);
nod=dad;
}
F[it][d]+=Add;
F[d][it]-=Add;
flux+=Add;
nod=it;
while(nod!=s)
{
dad=t[nod];
F[nod][dad]-=Add;
F[dad][nod]+=Add;
nod=dad;
}
}
}
return flux;
}
int main()
{
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y>>cst;
c[x][y]=cst;
G[x].push_back(y);
G[y].push_back(x);
}
g<<Maxflow(1,n)<<'\n';
return 0;
}