Pagini recente » Cod sursa (job #1433599) | Cod sursa (job #2933341) | Cod sursa (job #566975) | Cod sursa (job #1520135) | Cod sursa (job #2959672)
#include<iostream>
#include<cstring>
#include<bitset>
#include<vector>
#include<queue>
using namespace std;
#pragma GCC optimize("O3")
const int NMAX = 1e3 + 1;
int flow[NMAX][NMAX],cap[NMAX][NMAX],minim,n;
vector<int> vecini[NMAX],t(NMAX);
int bfs()
{
fill(t.begin(),t.begin() + n + 1,-1);
queue<pair<int,int>> q;
q.push({1,2e9});
while(!q.empty())
{
int nod = q.front().first;
int f = q.front().second;
q.pop();
for(auto it : vecini[nod])
{
if(t[it] != -1)
continue;
int rez = cap[nod][it] - flow[nod][it];
if(!rez) continue;
t[it] = nod;
if(it == n) return min(f,rez);
q.push({it,min(f,rez)});
}
}
return 0;
}
void ffa()
{
long long total = 0;
int minim;
while(minim = bfs())
{
total += 1LL * minim;
int nod = n;
while(nod != 1)
{
flow[t[nod]][nod] += minim;
flow[nod][t[nod]] -= minim;
nod = t[nod];
}
}
cout << total << endl;
exit(0);
}
int main()
{
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
int a,b,c,m; cin >> n >> m;
while(m--)
{
cin >> a >> b >> c;
cap[a][b] = c;
vecini[a].push_back(b);
vecini[b].push_back(a);
}
///ford-fulkerson
ffa();
}