#include <bits/stdc++.h>
using namespace std;
//common
#define pb push_back
#define se second
#define fi first
#define ll long long
const int nax=505;
int n,m,t,l;
vector<pair<int,int>> adj[nax];
int to[nax][nax];
pair<int,int> from[nax*2];
long long dst[nax*2][nax*2];
long long dp[100005][505];
int tab[100005];
void djikastra(int i){
priority_queue<pair<ll,int>,vector<pair<ll,int>>,greater<pair<ll,int>>> pq;
pq.push({0,i});
dst[i][i]=0;
while(!pq.empty()){
long long d=pq.top().fi;
int x=pq.top().se;
//cout <<from[i].fi<<" "<<from[i].se<<" "<<d<<" "<<from[x].fi<<" "<<from[x].se<<endl;
pq.pop();
if(dst[i][x]<d) continue;
for(auto u:adj[from[x].se]){
int a=from[x].fi;
int b=from[x].se;
if(u.fi==a||u.fi==0) continue;
long long cur=u.se+d;
if(cur>=dst[i][to[from[x].se][u.fi]]) continue;
dst[i][to[from[x].se][u.fi]]=cur;
pq.push({cur,to[from[x].se][u.fi]});
}
}
return;
}
long long dfs(int i,int lst){
if(i==l-1) return 0;
if(dp[i][lst]!=-1) return dp[i][lst];
dp[i][lst]=1e18;
for(auto u:adj[tab[i+1]]){
dp[i][lst]=min(dp[i][lst],dfs(i+1,u.fi)+dst[to[lst][tab[i]]][to[u.fi][tab[i+1]]]);
}
//cout <<i<<" "<<lst<<" "<<dp[i][lst]<<endl;
return dp[i][lst];
}
int main(){
/*#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
#endif*/
cin>>n>>m>>t>>l;
memset(dp,-1,sizeof dp);
for (int i = 0; i < nax*2; ++i){
for (int j = 0; j < nax*2; ++j)
{
dst[i][j]=1e18;
}
}
for (int i = 0; i < m; ++i)
{
int x,y,z;
cin>>x>>y>>z;
adj[x].pb({y,z});
adj[y].pb({x,z});
}
for (int i = 0; i < l; ++i)
{
cin>>tab[i];
}
int x,y;
cin>>x>>y;
tab[x-1]=y;
adj[tab[0]].pb({0,0});
int cnt=0;
for (int i = 1; i <= n; ++i)
{
for (int j = 0; j < adj[i].size(); ++j)
{
to[adj[i][j].fi][i]=cnt;
from[cnt]={adj[i][j].fi,i};
cnt++;
}
}
for (int i = 0; i < cnt; ++i)
{
djikastra(i);
}
/*for (int i = 0; i < cnt; ++i)
{
for (int j = 0; j < cnt; ++j)
{
cout << (dst[i][j]==1e18 ? -1 : dst[i][j]) <<" ";
}cout <<endl;
}*/
long long ans=dfs(0,0);
cout << (ans>=1e18 ? -1 : ans)<<endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |