Pagini recente » Cod sursa (job #2943039) | Cod sursa (job #2472593) | Cod sursa (job #3237649) | Cod sursa (job #2108350) | Cod sursa (job #1891629)
#include <bits/stdc++.h>
using namespace std;
ifstream f("ubuntzei.in");
ofstream g("ubuntzei.out");
const int nmax=375;
const int logmax=((1<<15)-1)+5;
int n,m,k;
int stops[nmax];
int cost[nmax][logmax];
vector <pair <int,int> > graf[nmax]; /// nod , cost
priority_queue <pair <int, pair<int,int> > , vector < pair <int, pair<int,int> > > , greater < pair <int, pair <int,int> > > > cod; /// cost , nod , stare
void dijkstra()
{
int i,nodac,confac,costac,vecini,nodnou,costnou,copieconf;
cost[1][0]=0;
cod.push(make_pair(0,make_pair(1,0)));
while (!cod.empty())
{
costac=cod.top().first;
nodac=cod.top().second.first;
confac=cod.top().second.second;
copieconf=confac;
cod.pop();
//g<<costac<<" "<<nodac<<" "<<confac<<'\n';
vecini=graf[nodac].size();
for (i=0;i<vecini;i++)
{
confac=copieconf;
nodnou=graf[nodac][i].first;
costnou=graf[nodac][i].second;
if (costac>cost[nodac][confac])
continue;
if (stops[nodnou]!=0)
{
confac=( (confac) | (1<<(stops[nodnou]-1)) );
}
if (costnou+costac<cost[nodnou][confac])
{
cost[nodnou][confac]=costnou+costac;
cod.push(make_pair(costnou+costac,make_pair(nodnou,confac)));
//g<<costnou+costac<<" "<<nodac<<">"<<nodnou<<" "<<confac<<'\n';
}
}
}
}
int main()
{
int i,j,x,y,costac,nrfriends=0;
f>>n>>m;
for (i=1;i<=n;i++)
for (j=1;j<=logmax;j++)
cost[i][j]=INT_MAX;
f>>k;
for (i=1;i<=k;i++)
{
f>>x;
stops[x]=i;
}
for (i=1;i<=m;i++)
{
f>>x>>y>>costac;
graf[x].push_back(make_pair(y,costac));
graf[y].push_back(make_pair(x,costac));
}
dijkstra();
/*
for (i=1;i<=n;i++)
{
for (j=0;j<=1;j++)
g<<cost[i][j]<<" ";
g<<'\n';
}
*/
g<<cost[n][(1<<k)-1];
return 0;
}