Pagini recente » Cod sursa (job #2857990) | Cod sursa (job #379439) | Cod sursa (job #340935) | Cod sursa (job #2790230) | Cod sursa (job #701933)
Cod sursa(job #701933)
#include<stdio.h>
FILE *f,*g;
int d[2001][2001],min,n,m,s,ka,kar[16],c[2001][2001],M[2001];
int main()
{
f=fopen("ubuntzei.in","r");
g=fopen("ubuntzei.out","w");
fscanf(f,"%d%d%d",&n,&m,&ka);
register int i,k,j;
kar[0]=1;
for(i=1;i<=ka;++i)
fscanf(f,"%d",&kar[i]);
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
if(i!=j)
c[i][j]=999999999;
int a,b,e,l;
for(i=0;i<m;++i)
{
fscanf(f,"%d%d%d",&a,&b,&e);
c[a][b]=e;
c[b][a]=e;
}
for(i=0;i<=ka;++i)
{
for(j=0;j<=n;++j)
M[j]=0;
//u=1;
//c[kar[i]][kar[i]]=0;
M[kar[i]]=1;
for(j=1;j<=n;++j)
d[i][j]=c[kar[i]][j];
for(j=1;j<n;++j)
{
min=99999999;
//a=0;
for(k=1;k<=n;++k)
{
if(M[k]==0 && min>d[i][k])
{
min=d[i][k];
a=k;
}
}
M[a]=1;
for(k=1;k<=n;++k)
{
if(M[k]==0 && d[i][k]>d[i][a]+c[a][k] && i!=k)
d[i][k]=d[i][a]+c[a][k];
}
}
}
if(ka==0)
fprintf(g,"%d",d[0][n]);
else
{
a=0;
s=0;
b=0;
while(a!=n)
{
min=99999999;
if(a==kar[ka])
{
s+=d[b][n];
a=n;
}
else
{
for(i=1;i<=ka;i++)
if(d[b][kar[i]]<min)
{
min=d[b][kar[i]];
a=kar[i];
e=i;
}
s+=d[b][a];
b=e;
}
}
fprintf(g,"%d",s);
}
}