Pagini recente » Cod sursa (job #1220935) | Cod sursa (job #354912) | Cod sursa (job #3240951) | Cod sursa (job #2491016) | Cod sursa (job #890980)
Cod sursa(job #890980)
#include <fstream>
using namespace std;
ifstream fin("ubuntzei.in");
ofstream fout("ubuntzei.out");
unsigned int a[2001][2001],s=200000000;
short n,k;
bool v[2001];
void bk(short i,short suma)
{
short j;
int aux;
bool u=0;
if(v[i]==1)
{
v[i]=0;
u=1;
}
if(i==n)
{
for(j=2;j<n;j++)
if(v[j]==1)
goto loop;
if(suma<s)
s=suma;
}
else
{
for(j=1;j<=n;j++)
{
if(a[i][j]!=0)
{
aux=a[i][j];
suma+=a[i][j];
a[i][j]=0;
bk(j,suma);
suma-=aux;
a[i][j]=aux;
}
}
}
if(u==1)
v[i]=1;
loop:;
}
int main()
{
short m,i,j,x,y;
fin>>n>>m>>k;
for(i=0;i<k;i++)
{
fin>>x;
v[x]=1;
}
for(i=0;i<m;i++)
{
fin>>x>>y;
fin>>a[x][y];
a[y][x]=a[x][y];
}
for(i=2;i<n;i++)
{
if(v[i]==0)
{
for(j=1;j<=n;j++)
{
if(a[i][j]>0)
{
for(x=j+1;x<=n;x++)
{
if(a[j][x]==0 || a[i][j]+a[i][x]<a[j][x])
{
a[j][x]=a[i][j]+a[i][x];
a[x][j]=a[i][j]+a[i][x];
}
}
a[i][j]=0;
a[j][i]=0;
}
}
}
}
bk(1,0);
fout<<s;
}