Cod sursa(job #1596803)

Utilizator Julian.FMI Caluian Iulian Julian. Data 11 februarie 2016 13:48:26
Problema Ubuntzei Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <iostream>
#include <fstream>
#define nmax 2016
using namespace std;
ifstream  fin("ubuntzei.in");
ofstream fout("ubuntzei.out");

long a[nmax][nmax],s,smin=999999999;
int n,k,st[20],viz[20],u[20];

void gen(int p)
{int i;
if(p==k+1){   s+=a[st[p-1]][n];
            if(s<smin)smin=s;
            s-=a[st[p]][n];
    }
else for(i=1;i<=k;i++)
     if(!viz[i])
      if(s+a[st[p-1]][u[i]]<smin)
      {st[p]=u[i];  viz[i]=1;
       s+=a[st[p-1]][u[i]];
       gen(p+1);
       s-=a[st[p-1]][u[i]];
       viz[i]=0;
      }

}



int main()
{int m,i,j,k2,x,y;
long z;
    fin>>n>>m;
    fin>>k;
    for(i=1;i<=k;i++)fin>>u[i];
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        a[i][j]=999999999;

    for(i=1;i<=m;i++)
    {fin>>x>>y>>z;
     a[x][y]=a[y][x]=z;

    }

    for(k2=1;k2<=n;k2++)
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
              a[i][j]=min(a[i][j],a[i][k2]+a[k2][j]);

    s=0;
    st[0]=1;
    gen(1);
    fout<<smin;
}