Cod sursa(job #3038194)

Utilizator DordeDorde Matei Dorde Data 26 martie 2023 22:15:37
Problema Flux maxim Scor 70
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <stdio.h>
#include <stdlib.h>

#define N 1001
#define inf 1e9
#define min(x,y) (x<y?x:y)

int n , m , a , b , c , l , r;
int q[N] , t[N];
char viz[N];
int f[N][N];
char bfs(){
    for(int i = 1 ; i <= n ; ++ i){
        viz[i] = 0;
    }
    q[l = r = 1] = viz[1] = 1;
    while(l <= r){
        int x = q[l++];
        for(int i = 1 ; i <= n ; ++ i){
            if(f[x][i] > 0 && !viz[i]){
                viz[i] = 1;
                t[i] = x;
                q[++r] = i;
                if(i == n)
                    return 1;
            }
        }
    }
    return 0;
}
int maxflow(){
    int flow = 0;
    while(bfs()){
        int nf = inf , x = n;
        while(t[x]){
            nf = min(nf , f[t[x]][x]);
            x = t[x];
        }
        flow += nf , x = n;
        while(t[x]){
            f[t[x]][x] -= nf;
            f[x][t[x]] += nf;
            x = t[x];
        }
    }
    return flow;
}
int main(){
    FILE *fin = fopen("maxflow.in" , "r");
    FILE *fout = fopen("maxflow.out" , "w");
    fscanf(fin , "%d%d" , &n , &m);
    for(int i = 1 ; i <= m ; ++ i){
        fscanf(fin , "%d%d%d" , &a , &b , &c);
        f[a][b] = c;
    }
    fprintf(fout , "%d\n" , maxflow());
    return 0;
}