#include<bits/stdc++.h>
#define pii pair<int, int>
#define INF 1<<30
#define N 10100
using namespace std;
int node;
int dijstkra(vector<pii>adj[], int start, int finish)
{
priority_queue<pii, vector<pii>, greater<pii>> q;
vector<int>d(N, INF);
d[start] = 0;
q.push(pii(0, start));
while(!q.empty())
{
int u = q.top().second;
q.pop();
if(u == finish)
return d[u];
for(auto x : adj[u])
{
int v = x.first;
int w = x.second;
if(d[v] > d[u] + w)
{
d[v] = d[u] + w;
q.push(pii(d[v], v));
}
}
}
return d[finish];
}
int main()
{
ios_base :: sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int t;
cin >> t;
while(t--)
{
cin >> node;
vector<pii>adj[node+10];
map<string, int>mp;
for(int i=1; i<=node; i++)
{
string st;
cin >> st;
mp[st] = i;
int n1, w, m;
cin >> m;
for(int j=1; j<=m; j++)
{
cin >> n1 >> w;
adj[i].push_back(pii(n1, w));
}
}
int k;
cin >> k;
string st1, st2;
for(int j=1; j<=k; j++)
{
cin >> st1 >> st2;
int node1 = mp[st1];
int node2 = mp[st2];
int result = dijstkra(adj, node1, node2);
cout << result << "\n";
}
}
return 0;
}
Comments
Post a Comment