#include <bits/stdc++.h>
using namespace std;

int p[10001],r[10001];

void init() {
  for(int i=0; i<10001; i++) {
    p[i]=i;
    r[i]=0;
  }
}
int find(int x) {
  if(p[x]==x) return x;
  else return p[x]=find(p[x]);
}
void unite(int x, int y) {
  x=find(x);
  y=find(y);
  if(x==y) return;
  if(r[x]<r[y]) p[x]=y;
  else {
    p[y]=x;
    if(r[x]==r[y]) r[x]++;
  }
}

bool same(int x, int y) {
  return find(x)==find(y);
}
  
int main() {
  init();
  map<string,int> a,m;
  int n;
  cin >> n;
  string s[n];
  for(int i=0; i<n; i++) {
    int x;
    cin >> s[i] >> x;
    m[s[i]]=i;
    a[s[i]]=x;
  }
  int k;
  cin >> k;
  for(int i=0; i<k; i++) {
    string s,t;
    cin >> s >> t;
    unite(m[s],m[t]);
  }
  int d[n],c[n];
  fill(d,d+n,1000000007);
  memset(c,0,sizeof(c));
  for(int i=0; i<n; i++) {
    d[find(i)]=min(d[find(i)],a[s[i]]);
    c[find(i)]++;
  }
  int ans=0;
  for(int i=0; i<n; i++) {
    if(d[i]!=1000000007) ans+=d[i]*c[i];
  }
  cout << ans << endl;
  return 0;
}
