Cod sursa(job #2642074)

Utilizator OvidRata Ovidiu Ovid Data 13 august 2020 16:40:55
Problema Flux maxim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include<bits/stdc++.h>
using namespace std;
#define INIT  ios_base :: sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define mp make_pair
#define pb push_back
#define ft first
#define sc second
#define ll long long
#define pii pair<int, int>
#define count_bits __builtin_popcount
#define int ll

int n, m;
int c[1010][1010];
int r[1010][1010];
vector<int> g[1010];
bool v[1010];
int fin=0;




int dfs(int s, int cut){
v[s]=true;
if(s==n){fin+=cut;v[n]=false; return cut;}
int res=0;


for(int i:g[s]){
    if( (r[s][i]<c[s][i]) && (v[i]==false) ){
        int ret=dfs(i, min(cut, c[s][i]-r[s][i]));
        if(ret>0){
            r[s][i]+=ret; r[i][s]-=ret;
            res=ret; break;
        }
    }


}

v[s]=false;
return res;
}



int32_t main(){
INIT
cin>>n>>m;
while(m--){
    int x,y; cin>>x>>y; cin>>c[x][y];
    c[y][x]=c[x][y];
    g[x].pb(y); g[y].pb(x);
}



while(true){
    int cut=dfs(1, 1e9);
    //fin+=cut;
    if(cut<=0){break;}
}


/*for(int i=1; i<=n; i++){
    for(int j=1; j<=n; j++){
        cout<<r[i][j]<<" ";
    }
    cout<<"\n";
}*/

cout<<fin;



return 0;
}