Cod sursa(job #2164209)

Utilizator miruna999Morarasu Miruna miruna999 Data 12 martie 2018 22:11:29
Problema Ubuntzei Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("ubuntzei.in");
ofstream g("ubuntzei.out");
int n,m,k,a[2002][2002],x[12],viz[12],c[12],x1,y,z,lmin=1000000000;

int sum()
{
    int s=a[1][x[1]]+a[x[k]][n];
    for(int i=1;i<n;i++)
        s+=a[x[i]][x[i+1]];
    return s;
}

void backt(int j)
{
    for(int i=1;i<=k;i++)
        if(!viz[i])
        {
            viz[i]=1;
            x[j]=c[i];
            if(j<k)
                backt(j+1);
            else
            {
                int s=sum();
                if(s<lmin)
                    lmin=s;
            }
            viz[i]=0;
        }
}

int main()
{
    f>>n>>m>>k;
    for(int i=1;i<=k;i++)
        f>>c[i];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            if(i!=j)
                a[i][j]=1000000000;
    for(int i=1;i<=m;i++)
        f>>x1>>y>>z,a[x1][y]=z,a[y][x1]=z;
    for(int p=1;p<=n;p++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                if(a[i][p]+a[p][j]<a[i][j])
                    a[i][j]=a[i][p]+a[p][j];
    backt(1);
    g<<lmin;
    return 0;
}