| 比赛 |
2026.5.16 |
评测结果 |
WWAWWWWWWAAAWWWWAAAA |
| 题目名称 |
不是一道路径查询问题 |
最终得分 |
40 |
| 用户昵称 |
VTXE |
运行时间 |
2.304 s |
| 代码语言 |
C++ |
内存使用 |
17.60 MiB |
| 提交时间 |
2026-05-16 09:33:18 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll n,m,q,v;
ll fa[110000][70];
bool vis[70];
ll find(ll xx,ll yy){
if (fa[xx][yy]==xx) return xx;
else{
fa[xx][yy]=find(fa[xx][yy],yy);
return fa[xx][yy];
}
}
int main(){
freopen("Paths.in","r",stdin);
freopen("Paths.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m>>q>>v;
for (int i=1;i<=n;i++){
for (int j=0;j<=62;j++){
fa[i][j]=i;
}
}
for (int j=60;j>=0;j--){
if (v&(1ll<<j)){
vis[j]=1;
}
}
for (int i=1;i<=m;i++){
ll u,v,w;
cin>>u>>v>>w;
for (int j=60;j>=0;j--){
bool c=(w&(1ll<<j));
if (!vis[j]&&c) fa[find(u,j)][j]=find(v,j);
else if (vis[j]&&!c) break;
}
if ((w&v)==v) fa[find(u,61)][61]=find(v,61);
}
for (int i=1;i<=q;i++){
ll u,v;
cin>>u>>v;
bool c=0;
for (int j=61;j>=0;j--){
if (find(u,j)==find(v,j)){
c=1;
break;
}
}
if (c) cout<<"Yes\n";
else cout<<"No\n";
}
return 0;
}