Cod sursa(job #2164095)

Utilizator miruna999Morarasu Miruna miruna999 Data 12 martie 2018 21:30:02
Problema Ubuntzei Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 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=999999999;

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(k+1);
            else
            {
                int s=sum();
                if(s<lmin)
                    lmin=s;
            }
            viz[j]=0;
        }
}

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