Pagini recente » Cod sursa (job #2104554) | Cod sursa (job #823085) | Cod sursa (job #978846) | Cod sursa (job #352241)
Cod sursa(job #352241)
#include <stdio.h>
#include <vector>
#include <queue>
#define MAXN 1024
using namespace std;
bool viz[MAXN],ok;
int x,y,c,i,j,n,m,g[MAXN][MAXN],flow,node,f,parent[MAXN];
vector<int> e[MAXN];
queue<int> q;
inline 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]])
{
q.push(e[f][i]);
viz[e[f][i]] = true;
parent[e[f][i]] = f;
}
}
q.pop();
}
ok = viz[n];
}
inline void flux()
{
int min = 0;
for (i=0;i<e[n].size();i++)
{
if (g[e[n][i]][n] > 0)
{
min = g[e[n][i]][n];
node = e[n][i];
while (node != 1)
{
if (min>g[parent[node]][node])
{
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];
}
node = e[n][i];
g[node][n] -= min;
g[n][node] += min;
flow+=min;
}
}
}
int main()
{
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)
{
flux();
bfs();
}
printf("%d",flow);
return 0;
}