Pagini recente » Cod sursa (job #1688417) | Cod sursa (job #2581805) | Cod sursa (job #1884542) | Cod sursa (job #2145542) | Cod sursa (job #2348807)
#include <fstream>
#include <vector>
#include <queue>
#include <cstdio>
#define VAL 1005
#define INF 1000000000
using namespace std;
int N, M, i, j, ANS, a, b;
int dp[VAL][VAL], c, X;
int prec[VAL], p;
bool viz[VAL];
queue <int> Q;
vector <int> G[VAL];
vector <int> :: iterator it;
bool BFS()
{
for (j=1; j<=N; j++)
viz[j]=false;
viz[1]=true;
Q.push(1);
while (Q.empty()==false)
{
p=Q.front();
Q.pop();
if (p==N)
continue;
for (it=G[p].begin(); it!=G[p].end(); it++)
{
if (viz[*it]==false && dp[p][*it]>0)
{
viz[*it]=true;
prec[*it]=p;
Q.push(*it);
}
}
}
return viz[N]==true;
}
void Ford_Fulkerson()
{
while (BFS()==true)
{
for (j=0; j<G[N].size(); j++)
{
prec[N]=G[N][j];
X=INF;
for (i=N; i!=1; i=prec[i])
X=min(X, dp[prec[i]][i]);
if (X==0)
continue;
for (i=N; i!=1; i=prec[i])
{
dp[prec[i]][i]-=X;
dp[i][prec[i]]+=X;
}
ANS+=X;
}
}
}
int main()
{
freopen("maxflow.in", "r", stdin);
freopen("maxflow.out", "w", stdout);
scanf("%d %d", &N, &M);
for (i=1; i<=M; i++)
{
scanf("%d %d %d", &a, &b, &c);
G[a].push_back(b);
G[b].push_back(a);
dp[a][b]=c;
}
Ford_Fulkerson();
printf("%d\n", ANS);
return 0;
}