| 比赛 |
2026.5.16 |
评测结果 |
AAAAAAAAAAAAAAAATTTT |
| 题目名称 |
不是一道路径查询问题 |
最终得分 |
80 |
| 用户昵称 |
郑霁桓 |
运行时间 |
5.377 s |
| 代码语言 |
C++ |
内存使用 |
24.92 MiB |
| 提交时间 |
2026-05-16 09:03:50 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long n,m,T,xx,yy,V,zz,pv,vv,fa[60][100005],as,vs[1000005];
struct eg{
long long to,vl;
};
vector<eg>v[100005];
queue<long long>q;
inline long long fd(long long x,long long a2){
if(fa[a2][x]==x) return x;
return fa[a2][x]=fd(fa[a2][x],a2);
}
inline void bfs(long long a2){
for(long long i=1;i<=n;i++) fa[a2][i]=i,vs[i]=0;
for(long long i=1;i<=n;i++){
if(!vs[i]){
while(!q.empty()) q.pop();
q.push(i);
vs[i]=1;
while(!q.empty()){
long long tp=q.front();
q.pop();
for(long long j=0;j<v[tp].size();j++){
if((v[tp][j].vl&vv)==vv&&!vs[v[tp][j].to]){
q.push(v[tp][j].to);
fa[a2][fd(v[tp][j].to,a2)]=i;
vs[v[tp][j].to]=1;
}
}
}
}
}
return;
}
int main(){
freopen("Paths.in","r",stdin);
freopen("Paths.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m>>T>>V;
for(long long i=1;i<=m;i++){
cin>>xx>>yy>>zz;
v[xx].push_back({yy,zz});
v[yy].push_back({xx,zz});
}
for(long long i=59;i>=0;i--){
vv=pv+(1ll<<i);
bfs(i);
if((V>>i)&1) pv+=(1ll<<i);
}
while(T--){
cin>>xx>>yy;
vv=pv=0;
as=0;
for(long long i=59;i>=0;i--){
vv=pv+(1ll<<i);
if((V>>i)&1) pv+=(1ll<<i);
if(vv>=V){
if(fd(xx,i)==fd(yy,i)){
as=1;
break;
}
}
}
if(as) cout<<"Yes\n";
else cout<<"No\n";
}
return 0;
}