Pagini recente » Cod sursa (job #2526019) | Cod sursa (job #3144729) | Cod sursa (job #1636439) | Cod sursa (job #2888112) | Cod sursa (job #348329)
Cod sursa(job #348329)
#include <stdio.h>
#include <string.h>
#include <vector>
#include <queue>
#define MAXN 1024
using namespace std;
int g[MAXN][MAXN],parent[MAXN],node,i,flow,f,n,m,x,y,c;
vector<int> e[MAXN];
bool ok = false;
bool viz[MAXN];
queue<int> q;
void bfs()
{
memset(viz,0,sizeof(viz));
q.push(1);
viz[1] = true;
while (!q.empty())
{
f = q.front();
for (i=0;i<e[f].size();i++)
{
if (!viz[e[f][i]] && g[f][e[f][i]])
{
viz[e[f][i]] = true;
q.push(e[f][i]);
parent[e[f][i]] = f;
}
}
q.pop();
}
ok = viz[n];
}
int main()
{
int min;
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&n,&m);
for (i=0;i<m;i++)
{
scanf("%d%d%d",&x,&y,&c);
g[x][y] += c;
e[x].push_back(y);
e[y].push_back(x);
}
bfs();
while (ok)
{
for (i=0;i<e[n].size();i++)
{
if (g[e[n][i]][n]>0)
{
node = e[n][i];
min = g[node][n];
while (node!=1)
{
if (g[parent[node]][node] < min)
{
min = g[parent[node]][node];
}
node = parent[node];
}
node = e[n][i];
while (node!=1)
{
g[parent[node]][node]-=min;
g[node][parent[node]]+=min;
node = parent[node];
}
flow+=min;
node = e[n][i];
g[node][n]-=min;
g[n][node]+=min;
}
}
bfs();
}
printf("%d",flow);
return 0;
}