#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=100000+111;
int n,m,q,dis[maxn];
bool vis[maxn];
int x,y,ans[maxn];
struct node{
int v;int w;
node(int vv,int ww)
{
v=vv;w=ww;
}
};
vector<node> vt[maxn];
struct qnode{
int u;
int w;
qnode(int uu,int ww){
u=uu;w=ww;
}
friend bool operator <(qnode n1,qnode n2){
return n1.w>n2.w;
}
};
void dijkstra(int s,int e)
{
priority_queue<qnode> q;
memset(dis,0x7f7f7f7f,sizeof(dis));
memset(vis,false,sizeof(vis));
dis[s]=0;q.push(qnode(s,0));
while(!q.empty())
{
int u=q.top().u;q.pop();
if(vis[u])continue;
vis[u]=true;
for(int i=0;i<vt[u].size();i++)
{
int v=vt[u][i].v;
if(dis[u]^vt[u][i].w<dis[v])
{
dis[v]=dis[u]^vt[u][i].w;
q.push(qnode(v,dis[v]));
}
}
}
printf("%lld\n",dis[e]);
}
signed main()
{
scanf("%lld %lld %lld",&n,&m,&q);
for(int i=1;i<=m;i++)
{
int du,dv,dw;
scanf("%lld %lld %lld",&du,&dv,&dw);
vt[du].push_back(node(dv,dw));
vt[dv].push_back(node(du,dw));
}
for(int i=1;i<=q;i++)
{
scanf("%lld %lld",&x,&y);
dijkstra(x,y);
}
return 0;
}
测试点信息