Pagini recente » Cod sursa (job #3241350) | Cod sursa (job #1555569) | Cod sursa (job #1565706) | Cod sursa (job #847752) | Cod sursa (job #2406124)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
const int Nmax=1005;
int n,m;
int C[Nmax][Nmax],F[Nmax][Nmax],T[Nmax];
vector<int>L[Nmax];
bitset<Nmax>viz;
queue<int>q;
int Bfs()
{
viz.reset();
q.push(1);
int nod;
while(!q.empty())
{
nod=q.front();
q.pop();
viz[nod]=1;
for(auto i:L[nod])
if(!viz[i] && F[nod][i]<C[nod][i])
{
T[i]=nod;
q.push(i);
}
}
return viz[n];
}
void Flex()
{
int minflow,maxflow;
maxflow=0;
while(Bfs())
{
for(auto i:L[n])
if(viz[i])
{
minflow=C[i][n]-F[i][n];
for(int nod=i;nod!=1;nod=T[nod])
minflow=min(minflow,C[T[nod]][nod]-F[T[nod]][nod]);
if(!minflow)continue;
F[i][n]+=minflow;
F[n][i]-=minflow;
for(int nod=i;nod!=1;nod=T[nod])
{
F[T[nod]][nod]+=minflow;
F[nod][T[nod]]-=minflow;
}
maxflow+=minflow;
}
}
fout<<maxflow<<"\n";
}
int main()
{
fin>>n>>m;
int x,y,z;
for(int i=1;i<=m;i++)
{
fin>>x>>y>>z;
L[x].push_back(y);
L[y].push_back(x);
C[x][y]=z;
}
Flex();
fin.close();
fout.close();
return 0;
}