先存下来 被损坏的就建有权重的 没损坏的就建0权重的 跑一边最短路 就完了
#include <bits/stdc++.h>
using namespace std;
const int N = 1e4+10;
const int mod =100003;
#define int long long
#define endl '\n'
#define Endl '\n'
#define inf 1e18
#define fast ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
int n,m,q,a[N],b[N],c[N],h[N],e[N<<1],ne[N<<1],idx,d[N<<1],w[N<<1],s[N<<1];
void add(int a,int b,int c){
e[idx]=b;
w[idx]=c;
ne[idx]=h[a];
h[a]=idx++;
}
signed main(){
fast
cin>>n>>m;
for(int i=0;i<m;i++)cin>>a[i]>>b[i]>>c[i];
cin>>q;
memset(h,-1,sizeof h);
for(int i=0;i<q;i++){
int a1,b1;cin>>a1>>b1;
for(int j=0;j<m;j++){
if((a[j]==a1&&b[j]==b1)||(a[j]==b1&&b[j]==a1))add(a[j],b[j],c[j]),add(b[j],a[j],c[j]),s[j]++;
}
}
for(int i=0;i<m;i++)if(!s[i])add(a[i],b[i],0),add(b[i],a[i],0);
int x,y;cin>>x>>y;
queue<int>q;
memset(d,0x3f,sizeof d);
d[x]=0;
q.push(x);
while(q.size()){
auto t=q.front();
q.pop();
for(int i=h[t];~i;i=ne[i]){
int j=e[i];
if(d[j]>d[t]+w[i]){
d[j]=d[t]+w[i];
q.push(j);
}
}
}
cout<<d[y]<<Endl;
return 0^0;
}