Pagini recente » Cod sursa (job #2554712) | Cod sursa (job #860038) | Cod sursa (job #2762149) | Cod sursa (job #886626) | Cod sursa (job #2838403)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("ubuntzei.in");
ofstream fout("ubuntzei.out");
const int MAX=2005;
const int INF=2e9;
int n,m,k,a,b,d,id,mi,dtotal,c[MAX],dist[MAX],viz[MAX];
struct T
{
int nod,dist;
};
vector < T > v[MAX];
queue < int > q;
void dijkstra(int sursa)
{
for(int i=1;i<=n;i++)
dist[i]=INF;
dist[sursa]=0;
q.push(sursa);
while(!q.empty())
{
int nod=q.front();
q.pop();
for(auto vec : v[nod])
if(dist[nod]+vec.dist<dist[vec.nod])
{
dist[vec.nod]=dist[nod]+vec.dist;
q.push(vec.nod);
}
}
}
int main()
{
fin >> n >> m >> k;
for(int i=1;i<=k;i++)
fin >> c[i];
c[++k]=n;
while(m--)
{
fin >> a >> b >> d;
v[a].push_back({b,d});
v[b].push_back({a,d});
}
dijkstra(1);
for(int i=1;i<=k;i++)
{
id=0;
for(int j=1;j<=k;j++)
if(!viz[j])
if(!id)
{
mi=dist[c[j]];
id=j;
}
else if(dist[c[j]]<mi)
{
mi=dist[c[j]];
id=j;
}
dtotal+=mi;
viz[id]=1;
dijkstra(id);
}
fout << dtotal;
return 0;
}