Pagini recente » Cod sursa (job #2473262) | Cod sursa (job #2608468) | Cod sursa (job #128422) | Cod sursa (job #449929) | Cod sursa (job #2321279)
#include <bits/stdc++.h>
#define Dim 1002
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
int N,M,a,b,c;
int C[Dim][Dim],T[Dim],flow;
bool viz[Dim];
vector <int> V[Dim];
bool BFS()
{
queue <int> qu;
qu.push(1);
T[1]=1;
while(!qu.empty()&&!viz[N])
{
int nod=qu.front();
qu.pop();
viz[nod]=1;
for(unsigned int i=0;i<V[nod].size()&&!viz[N];i++)
{
int vecin=V[nod][i];
if(!viz[vecin]&&C[nod][vecin]>0)
{
viz[vecin]=1;
qu.push(vecin);
T[vecin]=nod;
}
}
}
return viz[N];
}
void init()
{
for(int i=1;i<=N;i++)
viz[i]=0,T[i]=0;
}
int main()
{
f>>N>>M;
for(int i=1;i<=M;i++)
{
f>>a>>b>>c;
C[a][b]=c;
V[a].push_back(b);
V[b].push_back(a);
}
while(BFS())
{
int minim=INT_MAX;
int poz=N;
while(poz!=1)
{
minim=min(minim,C[T[poz]][poz]);
poz=T[poz];
}
poz=N;
while(poz!=1)
{
C[T[poz]][poz]-=minim;
C[poz][T[poz]]+=minim;
poz=T[poz];
}
flow+=minim;
init();
}
g<<flow;
return 0;
}