记录编号 |
575235 |
评测结果 |
AAAAAAAAAA |
题目名称 |
基础最短路练习题 |
最终得分 |
100 |
用户昵称 |
该账号已注销 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
2.181 s |
提交时间 |
2022-09-07 21:08:22 |
内存使用 |
6.88 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
struct e{
int t,n,w;
}eg[400010];
int hd[100010]={0},cnt=0,n,m,q,f[100010]={0},d[100010]={0};
int get(int x){
if(f[x]==x)return x;
return f[x]=get(f[x]);
}
void add(int x,int y,int w){
eg[++cnt].t=y;
eg[cnt].n=hd[x];
eg[cnt].w=w;
hd[x]=cnt;
}
int dfs(int x,int fa){
for(int i=hd[x];i;i=eg[i].n){
int ver=eg[i].t;
if(ver==fa)continue;
d[ver]=d[x]^eg[i].w;
dfs(ver,x);
}
return 0;
}
int main(){
freopen("basiczdl.in","r",stdin);
freopen("basiczdl.out","w",stdout);
cin>>n>>m>>q;
for(int i=1;i<=n;i++)f[i]=i;
for(int i=1;i<=m;i++){
int x,y,z;
cin>>x>>y>>z;
if(cnt==2*(n-1))continue;
int a=get(x),b=get(y);
if(a==b)continue;
else f[b]=a;
add(x,y,z);
add(y,x,z);
}
dfs(1,1);
for(int i=1;i<=q;i++){
int x,y;
cin>>x>>y;
cout<<(d[x]^d[y])<<endl;
}
return 0;
}