#include<bits/stdc++.h>
using namespace std;
int n,m,b;
struct node
{
int to,value;
};
vector<node> maps[114514];
queue<int> q1;
int dis[114514];
bool book[114514];
int main()
{
scanf("%d%d%d",&n,&m,&b);
for(int i=1;i<=m;i++)
{
int r;
node s;
scanf("%d%d%d",&r,&s.to,&s.value);
maps[r].push_back(s);
maps[s.to].push_back({r,s.value});
}
for(int i=1;i<=b;i++)
{
int ans=0;
int p,q;
scanf("%d%d",&p,&q);
memset(dis,63,sizeof dis);
memset(book,false,sizeof book);
dis[p]=0,book[p]=true;
q1.push(p);
while(!q1.empty())
{
int u=q1.front();
book[u]=false;
for(int j=0;j<maps[u].size();j++)
{
int v=maps[u][j].to,v2=maps[u][j].value;
if(dis[v]>dis[u]+v2)
{
dis[v]=dis[u]+v2;
if(book[v]==false)
{
book[v]=true;
q1.push(v);
}
}
}
q1.pop();
}
ans+=dis[1];
while(!q1.empty()) q1.pop();
memset(book,false,sizeof book);
memset(dis,63,sizeof dis);
dis[1]=0,book[1]=true;
q1.push(1);
while(!q1.empty())
{
int u=q1.front();
book[u]=false;
for(int j=0;j<maps[u].size();j++)
{
int v=maps[u][j].to,v2=maps[u][j].value;
if(dis[v]>dis[u]+v2)
{
dis[v]=dis[u]+v2;
if(book[v]==false)
{
book[v]=true;
q1.push(v);
}
}
}
q1.pop();
}
ans+=dis[q];
printf("%d\n",ans);
}
return 0;
}
两遍SPFA,4点超时求调。