Cod sursa(job #2485734)

Utilizator radugnnGone Radu Mihnea radugnn Data 1 noiembrie 2019 22:28:01
Problema Cc Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.73 kb
#include <iostream>
#include <fstream>
#include <bitset>
#include <deque>
#include <vector>
#define DIM 205
using namespace std;
ifstream fin ("cc.in");
ofstream fout ("cc.out");
bitset <DIM> viz;
vector<int> L[DIM];
deque<int> q;
int n,i,vecin,x,y,s,d,c,nod,cost,j;
int Z[DIM][DIM],C[DIM][DIM],F[DIM][DIM],D[DIM],T[DIM];
int bell(){
    int gasit=0;
    viz.reset();
    q.clear();
    q.push_back(s);
    viz[s]=1;
    for(i=0;i<=2*n+1;i++)
        D[i]=1000000000;
    D[s]=0;
    while(!q.empty()){
        x=q.front();
        q.pop_front();
        viz[x]=0;
        for(i=0;i<L[x].size();i++){
            if(C[x][L[x][i]] > F[x][L[x][i]]){
                y=L[x][i];
                if(D[y]>D[x]+Z[x][y]){
                    D[y]=D[x]+Z[x][y];
                    T[y]=x;
                if(viz[vecin]==0) {
                    q.push_back(y);
                    viz[y]=1;
                }
                if(y==d)
                    gasit=1;
                }
            }
        }
    }
    return gasit;
}
int main(){
    fin>>n;
    for(i=1;i<=n;i++){
        for(j=1;j<=n;j++){
            fin>>x;
            L[i].push_back(n+j);
            L[n+j].push_back(i);
            Z[i][n+j]=x;
            Z[n+j][i]=-x;
            C[i][n+j]=1;

        }
        C[0][i]=1;
        C[n+i][2*n+1]=1;
        L[0].push_back(i);
        L[i].push_back(0);
        L[n+i].push_back(2*n+1);
        L[2*n+1].push_back(n+i);
    }
    s=0;
    d=2*n+1;
    while(bell()){
        nod=d;
        while(nod!=s){
            F[T[nod]][nod]++;
            F[nod][T[nod]]--;
            cost+=Z[T[nod]][nod];
            nod=T[nod];
        }

    }
    fout<<cost<<"\n";
    return 0;
}