Cod sursa(job #1698151)

Utilizator cojocarugabiReality cojocarugabi Data 3 mai 2016 21:13:15
Problema Flux maxim Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
# include <bits/stdc++.h>
using namespace std;
# define x first
# define y second
# define ll long long
# define db long double
int F[1 << 10][1 << 10];
int From[1 << 10];
int bfs(int n)
{
    queue < int > Q;
    Q.push(1);
    From[1] = 0;
    for (int i = 2;i <= n;++i) From[i] = -1;
    while (!Q.empty())
    {
        int node = Q.front();
        Q.pop();
        for (int i = 1;i <= n;++i)
            if (From[i] == -1 && F[node][i])
            {
                Q.push(i);
                From[i] = node;
            }
    }
    if (From[n] == -1) return 0;
    int flow = 1e9;
    for (int cnt = n;cnt != 1;cnt = From[cnt]) flow = min(flow,F[From[cnt]][cnt]);
    for (int cnt = n;cnt != 1;cnt = From[cnt]) F[From[cnt]][cnt] -= flow,F[cnt][From[cnt]] += flow;
    return flow;
}
int main(void)
{
    ifstream fi("maxflow.in");
    ofstream fo("maxflow.out");
    int n,m;
    fi>>n>>m;
    while (m --)
    {
        int a,b,c;
        fi>>a>>b>>c;
        F[a][b] += c;
    }
    int flow = 0,cnt;
    while ((cnt = bfs(n)) != 0) flow += cnt;
    fo << flow << '\n';
    return 0;
}