Pagini recente » Cod sursa (job #851416) | Cod sursa (job #2429785) | Cod sursa (job #2951003) | Cod sursa (job #3181434) | Cod sursa (job #2704279)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n,m,c[1001][1001],ans,level[1001],S,D,maxim[1001],from[1001];
vector<int> muchii[1001];
void dfs(int nod)
{
for(int i=0;i<muchii[nod].size();i++)
if(from[muchii[nod][i]]==-1&&level[muchii[nod][i]]==level[nod]+1)
if(c[nod][muchii[nod][i]]>0)
{
from[muchii[nod][i]]=nod;
dfs(muchii[nod][i]);
}
}
int flux()
{
for(int i=1;i<=n;i++)
{
level[i]=-1;
from[i]=-1;
}
level[S]=0;
queue<int> coada;
coada.push(S);
while(!coada.empty())
{
int nod=coada.front();
coada.pop();
for(int i=0;i<muchii[nod].size();i++)
{
int node=muchii[nod][i];
if(level[node]==-1&&c[nod][node]>0)
{
level[node]=level[nod]+1;
coada.push(node);
}
}
}
dfs(S);
if(from[D]==-1)
return 0;
int minim=1e9;
for(int nod=D;nod!=S;nod=from[nod])
minim=min(minim,c[from[nod]][nod]);
ans+=minim;
for(int nod=D;nod!=S;nod=from[nod])
{
c[from[nod]][nod]-=minim;
c[nod][from[nod]]+=minim;
}
return 1;
}
int main()
{
ios_base::sync_with_stdio(false);
fin.tie(0);
fout.tie(0);
fin>>n>>m;
for(int i=1;i<=m;i++)
{
int a,b;
fin>>a>>b;
fin>>c[a][b];
muchii[a].push_back(b);
muchii[b].push_back(a);
}
S=1;
D=n;
while(flux());
fout<<ans;
return 0;
}