Pagini recente » Cod sursa (job #2267913) | Cod sursa (job #1684511) | Cod sursa (job #2038006) | Cod sursa (job #1594255) | Cod sursa (job #1839171)
# include <stdio.h>
# include <bits/stdc++.h>
using namespace std;
const pair < int , int > DD[] = {{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1}};
# define fi cin
# define fo cout
# define x first
# define y second
# define ll long long
# define IOS ios_base :: sync_with_stdio(0);cin.tie(0)
# define p(v) cerr << #v << " = " << v << '\n'
# define p2(v) cerr << #v << " = " << (complex < int > (v.x,v.y)) << '\n'
# define vi vector < int >
# define vl vector < ll >
# define pii pair < int , int >
# define mp make_pair
# define db long double
# define pb push_back
# define pdd pair < db , db >
# define CF
int main(void)
{
#ifdef CF
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
#endif // CF
srand(time(0));
fo << fixed << setprecision(7);
cerr << fixed << setprecision(7);
static int F[1 << 20];
int n,m;
static vector < pii > s[1 << 20];
IOS;
fi>>n>>m;
for (int i = 0;i < m;++i)
{
int a,b,c;
fi>>a>>b>>c;
F[i << 1] = c;
F[i << 1 | 1] = 0;
s[a].pb(mp(b,i << 1));
s[b].pb(mp(a,i << 1 | 1));
}
int flow = 0;
auto bfs = [&](void)
{
static int D[1 << 20];
static int E[1 << 20];
for (int i = 1;i <= n;++i)
D[i] = 0,E[i] = 0;
queue < int > Q;
Q.push(1);
D[1] = 1;
while (!Q.empty() && !D[n])
{
int node = Q.front();
Q.pop();
for (auto it : s[node])
if (F[it.y] > 0 && !D[it.x])
D[it.x] = node,E[it.x] = it.y,Q.push(it.x);
}
if (!D[n])
return 0;
int mn = 1e9;
for (int i = n;i != 1;i = D[i])
mn = min(mn,F[E[i]]);
flow += mn;
for (int i = n;i != 1;i = D[i])
F[E[i]] -= mn,F[E[i] ^ 1] += mn;
return 1;
};
while (bfs()) ;
fo << flow << '\n';
cerr << "Time elapsed :" << clock() * 1000.0 / CLOCKS_PER_SEC << " ms" << '\n';
return 0;
}