Pagini recente » Cod sursa (job #558516) | Cod sursa (job #369148) | Cod sursa (job #3132925) | Cod sursa (job #2583389) | Cod sursa (job #2172180)
#include <iostream>
#include<fstream>
using namespace std;
ifstream f("ubuntzei.in");
ofstream g("ubuntzei.out");
bool viz[20];
long long n,m,k,c[20],i,x,y,cst,a[2011][2011],st[20],mn=1e17,ans;
void prelucreaza()
{
ans=a[1][c[st[1]]]+a[c[st[k]]][n];
for(int i=1;i<k;i++)
{
ans+=a[c[st[i]]][c[st[i+1]]];
}
mn=min(mn,ans);
}
void perm(int p)
{
for(int i=1;i<=k;i++)
if(!viz[i])
{
st[p]=i;
viz[i]=1;
if(p<k)
{
perm(p+1);
}
else
prelucreaza();
viz[i]=0;
}
}
void royfloyd()
{
int i,j,k;
for(k=1; k<=n; k++)
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
if ( a[i][k] && a[k][j] && (a[i][j] > a[i][k] + a[k][j] || !a[i][j]) && i!=j )
a[i][j]=a[i][k]+a[k][j];
}
int main()
{
f>>n>>m>>k;
for(i=1;i<=k;i++)
f>>c[i];
for(i=1;i<=m;i++)
{
f>>x>>y>>cst;
a[x][y]=a[y][x]=cst;
}
royfloyd();
perm(1);
g<<mn;
}