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