Pagini recente » Cod sursa (job #1249490) | Cod sursa (job #1788858) | Cod sursa (job #119050) | Cod sursa (job #2861739) | Cod sursa (job #3004221)
#include <bits/stdc++.h>
using namespace std;
ifstream f("ubuntzei.in");
ofstream g("ubuntzei.out");
struct muc{
int n,c;
};
const int nmax=2002;
const int kmax=17;
const int maskmax=(1<<kmax);
const int imax=0x3f3f3f3f;
int admat[kmax][kmax];
int ham[kmax][maskmax];
int prieten[nmax];
vector<muc> adj[nmax];
int n,m,k;
int dij[nmax];
void dodij(int st)
{
for(int i=1;i<=n;i++) dij[i]=imax;
dij[st]=0;
priority_queue<pair<int,int>, vector<pair<int,int> >, greater<pair<int,int> > > q;
q.push({0,st});
while(!q.empty())
{
int cst=q.top().first,nod=q.top().second;
q.pop();
if(dij[nod]!=cst) continue;
//cout<<"here "<<nod<<' '<<cst<<'\n';
//cea mai importanta linie de cod
if(prieten[nod]>0) admat[prieten[st]][prieten[nod]]=cst;
for(auto e:adj[nod])
{
if(dij[e.n]>cst+e.c)
{
dij[e.n]=cst+e.c;
q.push({dij[e.n],e.n});
}
}
}
}
int main()
{
f>>n>>m>>k;
int a,b,c;
for(int i=1;i<=k;i++)
{
f>>a;
prieten[a]=i;
}
k++;
prieten[n]=k;
for(int i=1;i<=m;i++)
{
f>>a>>b>>c;
adj[a].push_back({b,c});
adj[b].push_back({a,c});
}
dodij(1);
g<<admat[0][k]<<'\n';
return 0;
}