Pagini recente » Cod sursa (job #2456803) | Cod sursa (job #413925) | Cod sursa (job #687521) | Cod sursa (job #2241954) | Cod sursa (job #1838264)
#include <fstream>
#define pinf 20000000
using namespace std;
ifstream f("ubuntzei.in");
ofstream g("ubuntzei.out");
int n,m,s[101],d[101],t[101],ok,a[101][101],r,punct[101],k,b[101][101],c;
int punere(int nr, int k)
{
for(int i=1;i<=k;i++)
if(nr==punct[i]) return 1;
return 0;
}
void citire()
{
f>>n>>m;
f>>k;
for(int i=1;i<=k;i++) f>>punct[i];
int x,y;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[i][j]=pinf;
int nr=0;
for(int i=1;i<=m;i++)
{
nr++;
f>>x>>y>>c;
a[x][y]=c;
if(punere(nr,k)) b[x][y]=1;
}
}
void cauta_min(int &vf)
{
int minn=pinf;
for(int i=1;i<=n;i++)
if(!s[i])
if(d[i]<minn)
{
minn=d[i];
vf=i;
}
}
void imbunatatire_drum(int vf)
{
for(int i=1;i<=n;i++)
if(s[i]==0)
if(d[i]>d[vf]+a[vf][i])
{
d[i]=d[vf]+a[vf][i];
t[i]=vf;
}
}
void drum(int i)
{
if(t[i]) drum(t[i]);
g<<i<<" "; if(punere(i,k)) ok=1;
}
void afiseaza_vector(int v[101])
{
for(int i=1;i<=n;i++)
g<<v[i]<<" ";
g<<'\n';
}
int main()
{
int vf,minn;
citire();
r=1;
for(int i=1;i<=n;i++)
if(i!=r)
{
d[i]=a[r][i];
if(a[r][i]!=pinf)
t[i]=r;
}
for(int i=1;i<=n-1;i++)
{
cauta_min(vf);
s[vf]=1;
imbunatatire_drum(vf);
}
///afiseaza_vector(d);
///afiseaza_vector(s);
///afiseaza_vector(t);
///g<<'\n';
for(int i=1;i<=n;i++)
if(i==n)
if(t[i]!=0)
{
///g<<r<<" "<<i<<'\n';
///drum(i);
if(ok)
g<<d[i]<<'\n';
else g<<0;
}
///else g<<"nu exista de la "<<r<<" la "<<i<<'\n';
return 0;
}