Pagini recente » Cod sursa (job #557911) | Cod sursa (job #1908599) | Cod sursa (job #1973097) | Cod sursa (job #2264299) | Cod sursa (job #2864429)
#include <iostream>
#include <vector>
#include <fstream>
#include <queue>
using namespace std;
ifstream be("ubuntzei.in");
ofstream ki("ubuntzei.out");
int const dMax=50005;
int d[dMax],varosok[dMax];
int n,m,k;
int vegtelen (1<<30);
int s = 0;
struct comp
{
bool operator()(int x,int y)
{
return d[x] > d[y];
}
};
vector<pair<int,int> > graf[dMax];
priority_queue<int,vector<int>,comp> sor;
bool jart[dMax];
bool kjart[dMax] = {0};
void dijkstra(int csucs)
{
for(int i=1;i<=n;i++)
d[i]=vegtelen;
d[csucs]=0;
sor.push(csucs);
jart[csucs]=1;
while(!sor.empty())
{
int aktualiscsucs = sor.top();
sor.pop();
jart[aktualiscsucs]=0;
for(size_t i=0;i<graf[aktualiscsucs].size();i++)
{
int szomszedcsucs = graf[aktualiscsucs][i].first;
int suly = graf[aktualiscsucs][i].second;
if(d[aktualiscsucs]+suly<d[szomszedcsucs])
{
d[szomszedcsucs]=d[aktualiscsucs]+suly;
if(jart[szomszedcsucs]==0)
{
jart[szomszedcsucs]=1;
sor.push(szomszedcsucs);
}
}
}
}
}
void dkiir()
{
for(int i=1;i<=n;i++)
cout<<d[i]<<' ';
cout<<endl;
}
int kovetkezo()
{
int mini = vegtelen;
int miniIndex;
for(int i=1;i<=k;i++)
{
if(kjart[varosok[i]]==0 && d[varosok[i]]<mini)
{
mini = d[varosok[i]];
miniIndex = i;
}
}
s = s + mini;
kjart[varosok[miniIndex]] = 1;
return varosok[miniIndex];
}
int main()
{
be>>n>>m;
be>>k;
for(int i=1;i<=k;i++)
{
be>>varosok[i];
}
int a,b,c;
for(int i=0;i<m;i++)
{
be>>a>>b>>c;
graf[a].push_back(make_pair(b,c));
graf[b].push_back(make_pair(a,c));
}
kjart[1] = 1;
dijkstra(1);
s+=d[1];
for(int i=1;i<=k;i++)
{
dijkstra(kovetkezo());
//dkiir();
}
s+=d[n];
cout<<s<<endl;
ki<<s<<endl;
}