#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,q,cn;
vector<pair<int,int> > ed[2][20005];
void add(int k,int u,int v,int w){
ed[k][u].push_back({v,w});
ed[k][v].push_back({u,w});
}
int fa[10005],dfn[10005],low[10005];
int num;
int s[10005],sc[10005];
int fw[10005];
void build(int x,int y,int ww){
int sum = ww;
for(int i = y;i != x;i = fa[i]){
s[i] = sum;
sum += fw[i];
//cout << sum << " ";
}
s[x] = sc[x] = sum;
add(1,x,++cn,0);
//cout << cn << endl;
for(int i = y;i != x;i = fa[i]){
sc[i] = sum;
add(1,i,cn,min(s[i],sum-s[i]));
}
}
void tarjan(int x,int f){
//cout << x << endl;
dfn[x] = low[x] = ++num;
for(int i = 0;i < ed[0][x].size();++ i){
int y = ed[0][x][i].first;
int w = ed[0][x][i].second;
if(!dfn[y]){
fw[y] = w;
fa[y] = x;
tarjan(y,x);
low[x] = min(low[x],low[y]);
}
else if(y != f)
low[x] = min(low[x],dfn[y]);
if(low[y] > dfn[x]){
add(1,x,y,w);
}
}
for(int i = 0;i < ed[0][x].size();++ i){
int y = ed[0][x][i].first;
int w = ed[0][x][i].second;
if(fa[y] != x&&dfn[y] > dfn[x]){
build(x,y,w);
}
}
}
int up[20005][16];
int d[20005];
int dp[20005];
void dfs(int x,int f){
up[x][0] = f;
for(int i = 0;i < ed[1][x].size();++ i){
int y = ed[1][x][i].first;
int w = ed[1][x][i].second;
//cout << x << " " << y << " "<< w<< " ";
//cout << endl;
//cout << sc[x] << " " << sc[y] << endl;
if(y == f) continue;
d[y] = d[x]+w;
dp[y] = dp[x]+1;
dfs(y,x);
}
}
int A,B;
int lca(int x,int y){
if(dp[x] > dp[y]) swap(x,y);
for(int i = 15;i >= 0;-- i){
if(dp[up[y][i]] >= dp[x])
y = up[y][i];
}
if(x == y) return x;
for(int i = 15;i >= 0;-- i){
if(up[y][i] != up[x][i])
x = up[x][i],y = up[y][i];
}
A = x,B = y;
return up[y][0];
}
signed main(){
freopen("P5236_1.in","r",stdin);
cin >> n >> m >> q;cn = n;
for(int i = 1;i <= m;++ i){
int u,v,w;
cin >> u >> v >> w;
add(0,u,v,w);
}
//cout << endl;
tarjan(1,0);
dp[1] = 1;
dfs(1,0);
for(int i = 1;i < 16;++ i){
for(int x = 1;x <= cn;++ x){
up[x][i] = up[up[x][i-1]][i-1];
}
}
while(q--){
int u,v;
cin >> u >> v;
int p = lca(u,v);
if(p <= n){
//cout << d[u] << " " << d[v] << endl;
cout << d[u]+d[v]-2*d[p] << endl;
}
else{
int len = abs(d[A]-d[B]);
len = min(len,sc[A]-len);
cout << len+d[u]-d[A]+d[v]-d[B] << endl;
}
}
return 0;
}
样例全过但是交上去没有一个对的,求求大佬们帮帮我!