B. Mahmoud and Ehab and the message | Codeforces Round #473 (Div. 2)
int N, K, M; int main() { ios::sync_with_stdio(false); cin.tie(0); cout << fixed << setprecision(20); cin >> N >> K >> M; // 各単語の番号 map<string, int> id; rep(i, N) { string s; cin >> s; id[s] = i; } // 各単語の送信コスト vi A(N); rep(i, N)cin >> A[i]; // そのグループに属す単語で最小のコスト vi cost(K, INT_MAX); map<int, int> g; rep(i, K) { int x; cin >> x; rep(j, x) { int k; cin >> k; --k; // 番号kの単語はグループiに属す g[k] = i; smin(cost[i], A[k]); } } ll ans = 0; rep(i, M) { string s; cin >> s; // 単語sと同じグループに属す単語で最小のコストを使う ans += cost[g[id[s]]]; } cout << ans << endl; }