#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+9,M=1e6+9;
int h[N],ne[M],e[M],w[M],idx;
int dist[N],vis[N];
void add(int a,int b,int c){
w[++idx]=c;
e[idx]=b,ne[idx]=h[a],h[a]=idx;
}
typedef pair<int,int> pii;
void dij(int st){
memset(dist,0x3f,sizeof dist);
memset(vis,0,sizeof vis);
priority_queue<pii,vector<pii>,greater<pii>>q;
q.push({0,st});
dist[st]=0;
while(q.size()){
auto p=q.top();
q.pop();
if(vis[p.second])continue;;
vis[p.second]=1;
for(int i=h[p.second];i;i=ne[i]){
int j=e[i];
if(dist[j]>dist[p.second]+w[i]){
dist[j]=min(dist[j],dist[p.second]+w[i]);
q.push({dist[j],j});
}
}
}
}
signed main(){
int n,m;
std::ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<=m;i++){
int a,b,c;
cin>>a>>b>>c;
add(a,b,c);
add(b,a,c);
}
dij(1);
// cout<<dist[2]<<endl;
int q;
cin>>q;
while(q--){
int st,ed;
cin>>st>>ed;
cout<<dist[st]+dist[ed]<<"\n";
}
return 0;
}
史东薇尔城 (dijkstra 思维
于 2022-03-26 18:38:44 首次发布