记录编号 575235 评测结果 AAAAAAAAAA
题目名称 基础最短路练习题 最终得分 100
用户昵称 Gravatar该账号已注销 是否通过 通过
代码语言 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;
}