https://vjudge.net/contest/280495#problem/G
#include<iostream>
#include<cstdio>
using namespace std;
int f[100010],r[100010],x,y,s,n,m,Q;
int find(int x)
{
if(x==f[x]) return x;
int fx=find(f[x]);
r[x]+=r[f[x]];
return f[x]=fx;
}
int main()
{
cin>>n>>m>>Q;
for(int i=1;i<=n;i++)f[i]=i;
while(m--)
{
scanf("%d%d%d",&x,&y,&s);
int fx=find(x),fy=find(y);
if(fx!=fy)
{
f[fx]=fy;
r[fx]=r[y]+s-r[x];
//r[fx]表示fx比fy高多少分,可以用向量来解释,画下图更好理解
}
}
while(Q--)
{
scanf("%d%d",&x,&y);
int fx=find(x),fy=find(y);
if(fx!=fy)cout<<-1<<endl;
else cout<<r[x]-r[y]<<endl;
}
}