| 比赛 |
2026.5.16 |
评测结果 |
AAAAAAAAAAAATTTTTTTT |
| 题目名称 |
不是一道路径查询问题 |
最终得分 |
60 |
| 用户昵称 |
ChenBp |
运行时间 |
10.292 s |
| 代码语言 |
C++ |
内存使用 |
9.05 MiB |
| 提交时间 |
2026-05-16 11:17:39 |
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
const int N=1e5+5,M=1e6+6;
ll n,m,q,v;
int hd[N],to[M],nxt[M],num=1;
ll vl[M];
void add(int u,int v,ll w){
num++;
to[num]=v;
vl[num]=w;
nxt[num]=hd[u];
hd[u]=num;
}
int ed;
bool vis[N],ok;
void dfs(int u,ll l){
// cout<<u<<" "<<l<<endl;
if(u==ed){
if(l>=v){
ok=1;
}
return;
}
for(int i=hd[u];i;i=nxt[i]){
int v=to[i];
if(vis[v]) continue;
vis[v]=1;
dfs(v,l&vl[i]);
vis[v]=0;
}
}
int main(){
freopen("Paths.in","r",stdin);
freopen("Paths.out","w",stdout);
cin>>n>>m>>q>>v;
for(int i=1;i<=m;i++){
int u,v;
ll w;
scanf("%d %d %lld",&u,&v,&w);
add(u,v,w);
add(v,u,w);
}
while(q--){
int u,v;
scanf("%d %d",&u,&v);
ed=v;
for(int i=1;i<=n;i++){
vis[i]=0;
}
vis[u]=1;
ok=0;
dfs(u,(1ll<<62)-1);
if(ok){
cout<<"Yes\n";
}else{
cout<<"No\n";
}
}
return 0;
}