RT,10ptsWA
#include<iostream>
#include<algorithm>
using namespace std;
int n,m,d,u,v,dsyu,dsyv,len,minn,s,t,fa[100001];
struct data{
int u;
int v;
int w;
bool flag;
}e[100001],newe[100001];
int find(int x){
if(fa[x]==x){
return x;
}
return fa[x]=find(fa[x]);
}
bool cmp(data a,data b){
return a.w<b.w;
}
void kruskal(){
for(int i=1;i<=len;i++){
if(find(s)==find(t)){
return ;
}
int u=find(newe[i].u);
int v=find(newe[i].v);
if(u!=v){
fa[u]=v;
minn+=newe[i].w;
}
}
}
int main(){
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>e[i].u>>e[i].v>>e[i].w;
if(e[i].u>e[i].v){
swap(e[i].u,e[i].v);
}
e[i].flag=true;
}
cin>>d;
for(int i=1;i<=d;i++){
cin>>dsyu>>dsyv;
if(dsyu>dsyv){
swap(dsyu,dsyv);
}
for(int j=1;j<=m;j++){
if(e[j].u==dsyu&&e[j].v==dsyv){
e[j].flag=false;
newe[++len]=e[j];
}
}
}
cin>>s>>t;
sort(newe+1,newe+len+1,cmp);
for(int i=1;i<=n;i++){
fa[i]=i;
}
for(int i=1;i<=m;i++){
if(e[i].flag){
int u=find(e[i].u);
int v=find(e[i].v);
if(u!=v){
fa[u]=v;
}
}
}
kruskal();
cout<<minn;
}