Cod sursa(job #2788833)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 26 octombrie 2021 15:35:07
Problema Cc Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<fstream>
using namespace std;
ifstream F("cc.in");
ofstream G("cc.out");
int k,i,j,n,v[202][202],c[202][202],f[202][202],w[100001],u[202],g[202],p,q,t,l,r,e;
int main()
{
    for(F>>n,i=1;i<=n;++i)
        for(j=1;j<=n;++j)
            F>>k,v[i][n+j+1]=k,v[n+j+1][i]=-k,c[i][n+j+1]=1;
    for(i=1;i<=n;++i)
        c[0][i]=c[i+n+1][n+1]=1;
    while(1) {
        for(i=1;i<=2*n+1;++i)
            u[i]=0,g[i]=100001;
        for(g[0]=p=q=0,w[q++]=0;p<q;) {
            t=w[p++];
            if(t&&t<=n) {
                for(i=n+1;i<=2*n+1;++i)
                    if(f[t][i]<c[t][i]&&g[i]>g[t]+v[t][i])
                        w[q++]=i,u[i]=t,g[i]=g[t]+v[t][i];
            } else
                for(i=1;i<=n+1;++i)
                    if(f[t][i]<c[t][i]&&g[i]>g[t]+v[t][i])
                        w[q++]=i,u[i]=t,g[i]=g[t]+v[t][i];
        }
        if(!u[n+1])
            break;
        for(e+=g[n+1],l=n+1;l;l=u[l])
            ++f[u[l]][l],--f[l][u[l]];
    }
    G<<e;
    return 0;
}