#include<bits/stdc++.h>
using namespace std;
#define int long long
#define sky 0
int n,m,k;
const int N=505;
int dis[N][N];
int d[N];
int t;
bool flag[N];
signed main(){
cin>>n>>m;
memset(dis,0x3f,sizeof dis);
for(int i=0;i<=n;i++) dis[i][i]=0;
for(int i=1;i<=m;i++){
int a,b,c;
cin>>a>>b>>c;
dis[a][b]=dis[b][a]=c;
}
cin>>k>>t;
int q;
for(int i=1;i<=k;i++){
cin>>d[i];
dis[d[i]][sky]=t;
dis[sky][d[i]]=0;
}
for(int k=0;k<=n;k++){
for(int i=0;i<=n;i++){
for(int j=0;j<=n;j++){
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
}
}
}
cin>>q;
while(q--){
int op;
cin>>op;
int x,y,T;
if(op==1){
cin>>x>>y>>T;
if(dis[x][y]<T) continue;
dis[x][y]=T;
dis[y][x]=T;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j) continue;
dis[i][j]=min(dis[i][j],dis[i][x]+dis[y][j]+T);
dis[j][i]=dis[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j) continue;
dis[i][j]=min(dis[i][j],dis[i][y]+dis[i][j]+T);
dis[j][i]=dis[i][j];
}
}
}else if(op==2){
cin>>x;
dis[x][sky]=t;
dis[sky][x]=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j) continue;
dis[i][j]=min(dis[i][j],dis[i][x]+dis[sky][j]+t);
dis[j][i]=dis[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j) continue;
dis[i][j]=min(dis[i][j],dis[i][sky]+dis[x][j]);
dis[j][i]=dis[i][j];
}
}
}else{
int now=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
// cout<<(dis[i][j]>1e15?-1:dis[i][j])<<" ";
if(i==j) continue;
if(dis[i][j]>1e18) continue;
now+=dis[i][j];
}
// puts("");
}
cout<<now<<"\n";
}
}
return 0;
}
可能有亿点点长,所以悬赏2关