Pagini recente » Cod sursa (job #1851513) | Cod sursa (job #957708) | Cod sursa (job #526968) | Cod sursa (job #3277008) | Cod sursa (job #703467)
Cod sursa(job #703467)
#include<fstream>
using namespace std;
ifstream f("ubuntzei.in");
ofstream g("ubuntzei.out");
int n,m,k,c[2000],a[2001][2001];
int main()
{
f>>n>>m>>k;
for(int i=1;i<=k;i++)f>>c[i];
for(int i=1;i<=m;i++){int x,y;
f>>x>>y>>a[x][y];a[y][x]=a[x][y];}
for(int t=1;t<=n;t++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)if(i!=j && a[i][t]!=0 && a[t][j]!=0)
if(a[i][j]==0 || a[i][j]>a[i][t]+a[t][j])a[i][j]=a[i][t]+a[t][j];
//for(int i=1;i<=n;i++){
// for(int j=1;j<=n;j++)g<<a[i][j]<<" ";g<<endl;}
if(k==0){g<<a[1][n]<<"\n";
}
else{int mini=a[1][c[1]]+a[c[1]][n];
for(int i=2;i<=k;i++)mini+=a[c[1]][c[i]];
for(int t=2;t<=k;t++){int aux=a[1][c[t]]+a[c[t]][n];
for(int i=1;i<=k;i++)if(t!=i)aux+=a[c[t]][c[i]];
if(aux<mini)mini=aux;}
g<<mini<<"\n";
}
f.close();
g.close();
return 0;
}