Pagini recente » Cod sursa (job #2544827) | Cod sursa (job #2424237) | Cod sursa (job #333226) | Cod sursa (job #1555515) | Cod sursa (job #514595)
Cod sursa(job #514595)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
const int nmax = 1005;
const char iname[] = "maxflow.in";
const char oname[] = "maxflow.out";
ifstream fin(iname);
ofstream fout(oname);
queue<int> Q;
vector<int> Gf[nmax];
int n, m, i, x, y, maxflow, mflow, c;
int C[nmax][nmax], F[nmax][nmax], T[nmax], viz[nmax];
bool BF()
{
int first = 0; //inceputul cozii
memset(viz, 0, sizeof(viz));
//memset(T, 0, sizeof(T));
while(!Q.empty())
Q.pop();
Q.push(1);
while(!Q.empty())
{
first = Q.front();
Q.pop();
for(vector<int>::iterator it = Gf[first].begin(); it != Gf[first].end(); ++ it)
{
if(C[first][*it] == F[first][*it] || viz[*it])
continue;
T[*it] = first;
viz[*it] = 1;
Q.push(*it);
if(*it == n)
return 1;
}
}
return 0;
}
int main()
{
fin >> n >> m;
for(i = 1; i <= m; i ++)
{
fin >> x >> y >> c;
Gf[x].push_back(y);
Gf[y].push_back(x);
C[x][y] += c;
}
mflow = 2828282;
maxflow = 0;
while(BF() == 1)
{
for(i = n; i != 1; i = T[i])
mflow = min(mflow, C[T[i]][i] - F[T[i]][i]);
for(i = n; i != 1; i = T[i])
{
F[T[i]][i] += mflow;
F[i][T[i]] -= mflow;
}
maxflow += mflow;
}
fout << maxflow;
return 0;
}