Cod sursa(job #3188108)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 1 ianuarie 2024 17:57:00
Problema Flux maxim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include<bits/stdc++.h>
using namespace std;
ifstream F("maxflow.in");
ofstream G("maxflow.out");
int c[1001][1001],n,m,i,j,k,b[1001],f,h;
vector<short> g[1001];
queue<int> q;
int main()
{
    for(F>>n>>m;m--;F>>i>>j>>k,g[i].push_back(j),g[j].push_back(i),c[i][j]=k);
    for(;;) {
        for(q.push(1),memset(b,0,sizeof b),b[1]=1;!q.empty();q.pop())
            for(i=q.front(),k=g[i].size(),j=0;j<k;!b[g[i][j]]&&c[i][g[i][j]]?q.push(g[i][j]),b[g[i][j]]=i:0,++j);
        if(!b[n])
            return G<<f,0;
        for(k=g[n].size(),j=0;j<k;++j)
            if(c[g[n][j]][n]&&b[g[n][j]]) {
                for(h=c[g[n][j]][n],i=g[n][j];i>1;h=min(h,c[b[i]][i]),i=b[i]);
                for(f+=h,c[g[n][j]][n]-=h,c[n][g[n][j]]+=h,i=g[n][j];i>1;c[b[i]][i]-=h,c[i][b[i]]+=h,i=b[i]);
            }
    }
}