Cod sursa(job #2164334)

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

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
                lmin=min(lmin,sum());
            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]=0x3F3F3F3F;
    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++)
                a[i][j]=min(a[i][p]+a[p][j],a[i][j]);
    if(k==0)
        g<<a[1][n];
    else
    {
        backt(1);
        g<<lmin;
    }
    return 0;
}