Problem: https://www.spoj.com/problems/SHPATH/
Level: Easy
Code:
#include <bits/stdc++.h>
#define pii pair<int,int>
#define MAX 10004
#define INF INT_MAX
using namespace std;
int dijkstra(int src, int dst, vector<vector<pii> > &adj)
{
vector<int> dis(MAX, INF);
dis[src]=0;
priority_queue<pii, vector<pii>, greater<pii> > pq;
pq.push({0,src});
while(!pq.empty())
{
int u=pq.top().second;
int cost=pq.top().first;
pq.pop();
if(dis[u]<cost) continue;
for(int i=0; i<adj[u].size(); i++)
{
int v=adj[u][i].first;
cost=adj[u][i].second;
if(dis[u]+cost<dis[v])
{
dis[v]=dis[u]+cost;
pq.push({dis[v], v});
}
}
}
return dis[dst];
}
unordered_map<string,int> ump;
int main()
{
int t;
cin>>t;
while(t--)
{
int node;
cin>>node;
int from=1;
vector<vector<pii> > adj(MAX);
for(int i=0; i<node; i++)
{
string s;
cin>>s;
ump[s]=from;
int edge;
cin>>edge;
for(int j=0; j<edge; j++)
{
int to, cost;
cin>>to>>cost;
adj[from].push_back({to,cost});
adj[to].push_back({from,cost});
}
from++;
}
int query;
cin>>query;
for(int i=0; i<query; i++)
{
string src,dst;
cin>>src>>dst;
cout<<dijkstra(ump[src],ump[dst],adj)<<endl;
}
}
return 0;
}