Pagini recente » Istoria paginii runda/47/clasament | Cod sursa (job #496561) | Cod sursa (job #557954) | Cod sursa (job #2125108) | Cod sursa (job #700124)
Cod sursa(job #700124)
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
int n,m,i,j,k,a[1500][1500],v[150],x,y,c,s,minim,minct;
bool uz[1500];
int sol[1500];
void det(int k,int minct)
{
int i;
if(k==s+2)
{
minct+=a[sol[k-1]][n];
if(minct<minim)
minim=minct;
}
else
for(i=1;i<=s;++i)
if(!uz[v[i]])
{
uz[v[i]]=1;
sol[k]=v[i];
minct+=a[sol[k-1]][sol[k]];
det(k+1,minct);
uz[v[i]]=0;
minct-=a[sol[k-1]][sol[k]];
}
}
int main()
{
freopen("ubuntzei.in","r",stdin);
freopen("ubuntzei.out","w",stdout);
scanf("%d%d%d",&n,&m,&s);
for(i=1;i<=s;++i)
scanf("%d ",&v[i]);
for(i=1;i<=m;++i)
{
scanf("%d %d %d",&x,&y,&c);
a[x][y]=a[y][x]=c;
}
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][k] + a[k][j] < a[i][j] || !a[i][j]) && i != j)
a[i][j] = a[i][k] + a[k][j];
if(s==0)
printf("%lld\n",a[1][n]);
/* else
{
minim=1<<30;
minct=0;
sol[1]=1;
det(2,0);
printf("%lld\n",minim);
}*/
return 0;
}