Cod sursa(job #3038163)

Utilizator DordeDorde Matei Dorde Data 26 martie 2023 21:52:51
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
///edmons karp
#include<fstream>
#include<vector>
#include<bitset>

#define inf 1e9

using namespace std;
int const N = 1003;
int n , m , a , b , c;
int f[N][N];
int q[N] , t[N] , fl[N];
vector<int> v[N];
bitset<N> viz;
bool bfs(){
    viz = 0;
    int l = 1 , r = 1;
    q[1] = viz[1] = 1;
    fl[n] = fl[1] = inf;
    while(l <= r){
        int x = q[l++];
        for(int i : v[x]){
            if(f[x][i] > 0 && !viz[i]){
                viz[i] = 1;
                t[i] = x;
                q[++r] = i;
            }
        }
    }
    return viz[n];
}
int upd(int x , int add){
    int r = inf;
    while(t[x]){
        r = min(r , f[t[x]][x]);
        f[t[x]][x] -= add;
        f[x][t[x]] += add;
        x = t[x];
    }
    return r;
}
int maxflow(){
    int flow = 0;
    while(bfs()){
        int nf = upd(n , 0);
        flow += nf;
        upd(n , nf);
    }
    return flow;
}
int main(){
    freopen("maxflow.in" , "r" , stdin);
    freopen("maxflow.out" , "w" , stdout);
    scanf("%d%d" , &n , &m);
    for(int i = 1 ; i <= m ; ++ i){
        scanf("%d%d%d" , &a , &b , &c);
        f[a][b] = c;
        v[a].push_back(b);
        v[b].push_back(a);
    }
    printf("%d\n" , maxflow());
    return 0;
}