Pagini recente » Cod sursa (job #2885860) | Cod sursa (job #2954778)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int capacity[1001][1001],n,m,flow,max_flow;
vector<int> visited,parent;
vector<vector<int>> v;
bool bfs()
{
fill(visited.begin(), visited.end(), 0);
fill(parent.begin(), parent.end(), 0);
visited[1] = 1;
parent[1] = 1;
queue<int> q;
q.push(1);
while(!q.empty())
{
int nod = q.front();
q.pop();
if(nod == n)
return true;
for(int i=0; i<v[nod].size(); i++)
{
if(!visited[v[nod][i]] && capacity[nod][v[nod][i]] > 0)
{
q.push(v[nod][i]);
parent[v[nod][i]] = nod;
visited[v[nod][i]] = 1;
}
}
}
return false;
}
int main()
{
int a,b,c;
fin>>n>>m;
visited.resize(n+2, 0);
parent.resize(n+2, 0);
v.resize(n+2, {});
for(int i=1; i<=m; i++)
{
fin>>b>>c>>a;
v[b].push_back(c);
v[c].push_back(b);
capacity[b][c] = a;
}
int reusit = bfs();
while(reusit)
{
for(int i=0; i<v[n].size(); i++)
{
if(visited[v[n][i]])
{
parent[n] = v[n][i];
flow = INT_MAX;
for(int j=n; j!=1; j=parent[j])
{
flow=min(flow, capacity[parent[j]][j]);
}
if(flow != 0)
{
for(int j=n; j!=1; j=parent[j])
{
capacity[parent[j]][j] -= flow;
capacity[j][parent[j]] += flow;
}
max_flow += flow;
}
}
}
reusit = bfs();
}
fout<<max_flow;
return 0;
}