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