Pagini recente » Cod sursa (job #3209096) | Cod sursa (job #3281329) | Cod sursa (job #2437464) | Cod sursa (job #1936246) | Cod sursa (job #2613564)
#include <fstream>
#include <vector>
#include <queue>
#define nMax 1005
using namespace std;
int C[nMax][nMax];
int bfs(vector<int> G[nMax], int n, int dad[nMax])
{
queue<int> Q;
Q.push(1);
while(!Q.empty())
{
int nod=Q.front();
Q.pop();
for(int i:G[nod])
if (!dad[i] && C[nod][i]>0)
{
dad[i]=nod;
Q.push(i);
}
}
return dad[n];
}
int main()
{
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n, m;
fin >> n >> m;
vector<int> G[nMax];
for(int i=1; i<=m; i++)
{
int x, y, c;
fin >> x >> y >> c;
C[x][y]=c;
G[x].push_back(y);
G[y].push_back(x);
}
int flow = 0, dad[nMax]={0};
while(bfs(G, n, dad))
{
for(auto i:G[n])
{
int Min=C[i][n];
for(int j=i; j!=1; j=dad[j])
Min=min(Min, C[dad[j]][j]);
for(int j=i; j!=1; j=dad[j])
C[dad[j]][j]-=Min, C[j][dad[j]]+=Min;
flow+=Min;
C[i][n]-=Min;
C[n][i]+=Min;
}
fill(dad, dad+n+1, 0);
}
fout << flow;
return 0;
}