比赛 |
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;
}