#include #include #include #include #include #include using namespace std; const int INF = numeric_limits::max()>>1; typedef pair PII; int boarding_fee; int k; vector> dist; int nrsubsets; vector subsets; void read_dijkstra(); void generate_subset_costs(); int main() { read_dijkstra(); generate_subset_costs(); vector dp(1<>n>>m; vector< vector > Adj(n+1); for(int i=0;i>t>>u>>v>>c; Adj[u].push_back(PII(v,c)); if(t==2) Adj[v].push_back(PII(u,c)); } int comp_ind; cin>>boarding_fee>>comp_ind>>k; vector vempl(k+1); for(int i=1;i<=k;++i) cin>>vempl[i]; vempl[0]=comp_ind; dist.resize(k+1,vector(k+1,0)); for(int i=0;i<=k;++i){ int st=vempl[i]; vector d(n+1,INF); priority_queue,std::greater> pq; pq.push(PII( d[st]=0 , st )); while(!pq.empty()){ int c=pq.top().first; int v=pq.top().second; pq.pop(); if(d[v]==c) for(auto it=Adj[v].begin();it!=Adj[v].end();++it) if(d[it->first] > c + it->second) pq.push(PII((d[it->first]=c+it->second) , it->first)); } for(int j=0;j<=k;++j) dist[i][j]=d[vempl[j]]; } } void generate_subset_costs() { vector cst(1<