Pagini recente » Cod sursa (job #545901) | Cod sursa (job #951746) | preoji/clasament/11-12 | Cod sursa (job #2573988) | Cod sursa (job #792765)
Cod sursa(job #792765)
#include <fstream>
#include <queue>
#include <vector>
#include <cstring>
#define NM 1010
#define INF 999999999
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
queue<int> Q;
vector<int> G[NM];
int N,M,i,a,b,c;
int C[NM][NM],F[NM][NM];
int T[NM];
bool V[NM];
int ANS,FMIN;
unsigned int j;
bool BF ()
{
memset(V,0,sizeof(V));
V[1]=1;
Q.push(1);
while (!Q.empty())
{
a=Q.front();
Q.pop();
if (a==N) continue;
for (j=0; j<G[a].size(); j++)
{
if (F[a][G[a][j]]>=C[a][G[a][j]] || V[G[a][j]]) continue;
V[G[a][j]]=1;
T[G[a][j]]=a;
Q.push(G[a][j]);
}
}
return V[N];
}
int main ()
{
f >> N >> M;
for (i=1; i<=M; i++)
{
f >> a >> b >> c;
C[a][b]+=c;
G[a].push_back(b);
G[b].push_back(a);
}
while (BF())
{
FMIN=INF;
for (a=N; a!=1; a=T[a])
FMIN=min(C[T[a]][a]-F[T[a]][a],FMIN);
if (FMIN==0) continue;
for (a=N; a!=1; a=T[a])
{
F[T[a]][a]+=FMIN;
F[a][T[a]]-=FMIN;
}
ANS+=FMIN;
}
g << ANS << '\n';
f.close();
g.close();
return 0;
}