比赛 2024暑期C班集训3 评测结果 AAAWAAAAAAAAWWWATTTT
题目名称 不是一道路径查询问题 最终得分 60
用户昵称 健康铀 运行时间 5.982 s
代码语言 C++ 内存使用 11.75 MiB
提交时间 2024-07-03 11:43:05
显示代码纯文本
#include<bits/stdc++.h> 
using namespace std;
long long n,cnt,nm[500010][3],vs[65],m,q,pre[100010],u,v,w,pd,top,sum,jl[500010][2],ns[500010];
long long find(long long x){
    if(pre[x]==x)
    return x;
    return pre[x]=find(pre[x]);
}
void join(long long x,long long y){
    long long fx=find(x),fy=find(y);
    if(fx!=fy)
    pre[fx]=fy;
}
void js(long long v1){
    for(int i=1;i<=n;i++)
    pre[i]=i;
    for(int i=1;i<=m;i++) 
    if((nm[i][3]&v1)==v1)join(nm[i][1],nm[i][2]);
    for(int i=1;i<=q;i++)
    if(find(jl[i][1])==find(jl[i][2]))ns[i]=1;
}
int main()
{
    freopen("Paths.in","r",stdin);
    freopen("Paths.out","w",stdout);
    cin>>n>>m>>q>>v;
    for(long long i=1;i<=m;i++){
        long long x,y,z;
        cin>>x>>y>>z;
        nm[i][1]=x,nm[i][2]=y,nm[i][3]=z;
    }
    for(int i=1;i<=q;i++)
    cin>>jl[i][1]>>jl[i][2];
    js(v);
    for(long long i=0;i<=59;i++){
        if(!((1<<i)&v)){
            long long cnt=(((v>>i)+1)<<i);
            js(cnt);
        }
    }
    for(int i=1;i<=q;i++){
        if(ns[i]==1){
            cout<<"Yes"<<endl;
        }
        else
        cout<<"No"<<endl;
    }
    return 0;
}