Cod sursa(job #3329734)

Utilizator Mirc100Mircea Octavian Mirc100 Data 15 decembrie 2025 13:22:03
Problema Flux maxim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.5 kb
#include<fstream>
#include<iostream>
#include <queue>
#include <cstring>
#define NMX 10001
using namespace std;
int tata[NMX],n,m,viz[NMX];
//vector<int> l[NMX];
vector<int> lrezid[NMX];
int rezid[NMX][NMX]={0};

int bfs( ){
    int i,s=0,x;
    for(i=0;i<=n;i++)
    	viz[i]=tata[i]=0;
    queue<int> c;

    c.push(s);
    viz[s]=1;
    while(c.size()>0){
        x=c.front();
        c.pop();
        for(int y:lrezid[x]){

            if(viz[y]==0 && rezid[x][y]>0){
                tata[y]=x;
                if(y==n-1)
                    return 1;
                c.push(y);
                viz[y]=1;
            }
        }

    }
    return 0;
}

int main(){
     ifstream fs("maxflow.in");

     int i,x,y,j;
     int c;

     fs>>n>>m;
     for(i=0;i<m;i++){
         fs>>x>>y>>c;
        // l[x-1].push_back(y-1);
         lrezid[x-1].push_back(y-1);
         lrezid[y-1].push_back(x-1);
         rezid[x-1][y-1]=c;

     }

     fs.close();
     int fmax=0;
     while(bfs()){

          int iP=110000;
          int t=n-1;

           while(t!=0)  {

                if(iP>rezid[tata[t]][t])
                    iP= rezid[tata[t]][t];
                t=tata[t];
            }


          t=n-1;
          while(t!=0)  {
               rezid[tata[t]][t]-=iP;
                rezid[t][tata[t]]+=iP;
                t=tata[t];
          }
          fmax+=iP;

     }
     ofstream g("maxflow.out");
     g<<fmax;
     g.close();

     return 0;
}